2022-01-18 Jakub Jelinek PR target/104104 * config/i386/sse.md (__, avx512fp16_sh_v8hf, avx512dq_mul3, _permvar, avx2_perm_1, avx512f_perm_1, avx512dq_rangep, avx512dq_ranges, _getmant, avx512f_vgetmant): Use vxorps\t%x0, %x0, %x0 instead of vxorps\t{%x0, %x0, %x0}. * gcc.target/i386/pr104104.c: New test. --- gcc/config/i386/sse.md.jj 2022-01-18 11:58:59.156988142 +0100 +++ gcc/config/i386/sse.md 2022-01-18 21:20:40.022477778 +0100 @@ -6539,7 +6539,7 @@ (define_insn "__< { if (TARGET_DEST_FALSE_DEP_FOR_GLC && ) - output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); + output_asm_insn ("vxorps\t%x0, %x0, %x0", operands); return "v\t{%2, %1, %0|%0, %1, %2}"; } [(set_attr "type" "ssemul") @@ -6750,7 +6750,7 @@ (define_insn "avx512fp16_ { if (TARGET_DEST_FALSE_DEP_FOR_GLC && ) - output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); + output_asm_insn ("vxorps\t%x0, %x0, %x0", operands); return "vsh\t{%2, %1, %0|%0, %1, %2}"; } [(set_attr "type" "ssemul") @@ -15222,7 +15222,7 @@ (define_insn "avx512dq_mul3 && !reg_mentioned_p (operands[0], operands[1]) && !reg_mentioned_p (operands[0], operands[2])) - output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); + output_asm_insn ("vxorps\t%x0, %x0, %x0", operands); return "vpmullq\t{%2, %1, %0|%0, %1, %2}"; } [(set_attr "type" "sseimul") @@ -24658,7 +24658,7 @@ (define_insn "_permvar && !reg_mentioned_p (operands[0], operands[1]) && !reg_mentioned_p (operands[0], operands[2])) - output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); + output_asm_insn ("vxorps\t%x0, %x0, %x0", operands); return "vperm\t{%1, %2, %0|%0, %2, %1}"; } [(set_attr "type" "sselog") @@ -24900,7 +24900,7 @@ (define_insn "avx2_perm_1 && !reg_mentioned_p (operands[0], operands[1])) - output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); + output_asm_insn ("vxorps\t%x0, %x0, %x0", operands); return "vperm\t{%2, %1, %0|%0, %1, %2}"; } [(set_attr "type" "sselog") @@ -24975,7 +24975,7 @@ (define_insn "avx512f_perm_1 && !reg_mentioned_p (operands[0], operands[1])) - output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); + output_asm_insn ("vxorps\t%x0, %x0, %x0", operands); return "vperm\t{%2, %1, %0|%0, %1, %2}"; } [(set_attr "type" "sselog") @@ -26880,7 +26880,7 @@ (define_insn "avx512dq_rangep && !reg_mentioned_p (operands[0], operands[1]) && !reg_mentioned_p (operands[0], operands[2])) - output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); + output_asm_insn ("vxorps\t%x0, %x0, %x0", operands); return "vrange\t{%3, %2, %1, %0|%0, %1, %2, %3}"; } [(set_attr "type" "sse") @@ -26903,7 +26903,7 @@ (define_insn "avx512dq_ranges && !reg_mentioned_p (operands[0], operands[1]) && !reg_mentioned_p (operands[0], operands[2])) - output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); + output_asm_insn ("vxorps\t%x0, %x0, %x0", operands); return "vrange\t{%3, %2, %1, %0|%0, %1, %2, %3}"; } [(set_attr "type" "sse") @@ -26949,7 +26949,7 @@ (define_insn "_getmant && MEM_P (operands[1])) - output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); + output_asm_insn ("vxorps\t%x0, %x0, %x0", operands); return "vgetmant\t{%2, %1, %0|%0, %1, %2}"; } [(set_attr "prefix" "evex") @@ -26971,7 +26971,7 @@ (define_insn "avx512f_vgetmant && !reg_mentioned_p (operands[0], operands[1]) && !reg_mentioned_p (operands[0], operands[2])) - output_asm_insn ("vxorps\t{%x0, %x0, %x0}", operands); + output_asm_insn ("vxorps\t%x0, %x0, %x0", operands); return "vgetmant\t{%3, %2, %1, %0|%0, %1, %2, %3}"; } [(set_attr "prefix" "evex") --- gcc/testsuite/gcc.target/i386/pr104104.c.jj 2022-01-18 21:38:17.007906673 +0100 +++ gcc/testsuite/gcc.target/i386/pr104104.c 2022-01-18 21:36:10.475623148 +0100 @@ -0,0 +1,10 @@ +/* PR target/104104 */ +/* { dg-do assemble { target vect_simd_clones } } */ +/* { dg-require-effective-target masm_intel } */ +/* { dg-options "-march=alderlake -masm=intel -O1 -fallow-store-data-races -funroll-all-loops" } */ + +__attribute__ ((simd)) short int +foo (void) +{ + return 0; +}