]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000: Fix unpack for no-direct-move (PR103623)
authorSegher Boessenkool <segher@kernel.crashing.org>
Mon, 11 Apr 2022 15:43:38 +0000 (15:43 +0000)
committerSegher Boessenkool <segher@kernel.crashing.org>
Mon, 11 Apr 2022 21:00:25 +0000 (21:00 +0000)
The _dm alternative works fine for soft-float, but the _nodm variant
pattern is missing that alternative.  So, let's add that.

There probably should be an r,r,i alternative as well (or we can make it
rm,r,i), but that is for later.

2022-04-11  Segher Boessenkool  <segher@kernel.crashing.org>

PR target/105213
PR target/103623
* config/rs6000/rs6000.md (unpack<mode>_nodm): Add m,r,i alternative.

gcc/config/rs6000/rs6000.md

index fdfbc6566a5c93fe6fe36edd2acefe924db83ef5..f05b8358ba0a4a62a203bfc1283b4fc9f7e9e617 100644 (file)
   [(set_attr "type" "fp,fpstore,mtvsr,mfvsr,store")])
 
 (define_insn_and_split "unpack<mode>_nodm"
-  [(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "=d,m")
+  [(set (match_operand:<FP128_64> 0 "nonimmediate_operand" "=d,m,m")
        (unspec:<FP128_64>
-        [(match_operand:FMOVE128 1 "register_operand" "d,d")
-         (match_operand:QI 2 "const_0_to_1_operand" "i,i")]
+        [(match_operand:FMOVE128 1 "register_operand" "d,d,r")
+         (match_operand:QI 2 "const_0_to_1_operand" "i,i,i")]
         UNSPEC_UNPACK_128BIT))]
   "(!TARGET_POWERPC64 || !TARGET_DIRECT_MOVE) && FLOAT128_2REG_P (<MODE>mode)"
   "#"
 
   operands[3] = gen_rtx_REG (<FP128_64>mode, fp_regno);
 }
-  [(set_attr "type" "fp,fpstore")])
+  [(set_attr "type" "fp,fpstore,store")])
 
 (define_insn_and_split "pack<mode>"
   [(set (match_operand:FMOVE128 0 "register_operand" "=&d")