@@ -654,13 +654,10 @@ let Predicates = [PrefixInstrs] in {
654
654
(ins s34imm:$SI),
655
655
"pli $RT, $SI", IIC_IntSimple, []>;
656
656
}
657
+ }
657
658
659
+ let Predicates = [PrefixInstrs, HasFPU] in {
658
660
let mayLoad = 1, mayStore = 0 in {
659
- defm PLXV :
660
- 8LS_DForm_R_SI34_XT6_RA5_MEM_p<25, (outs vsrc:$XST), (ins (memri34 $D, $RA):$addr),
661
- (ins (memri34_pcrel $D, $RA):$addr),
662
- (ins s34imm_pcrel:$D),
663
- "plxv $XST, $addr", "plxv $XST, $D", IIC_LdStLFD>;
664
661
defm PLFS :
665
662
MLS_DForm_R_SI34_RTA5_MEM_p<48, (outs f4rc:$RST), (ins (memri34 $D, $RA):$addr),
666
663
(ins (memri34_pcrel $D, $RA):$addr),
@@ -671,6 +668,28 @@ let Predicates = [PrefixInstrs] in {
671
668
(ins (memri34_pcrel $D, $RA):$addr),
672
669
(ins s34imm_pcrel:$D), "plfd $RST, $addr",
673
670
"plfd $RST, $D", IIC_LdStLFD>;
671
+ }
672
+ let mayStore = 1, mayLoad = 0 in {
673
+ defm PSTFS :
674
+ MLS_DForm_R_SI34_RTA5_MEM_p<52, (outs), (ins f4rc:$RST, (memri34 $D, $RA):$addr),
675
+ (ins f4rc:$RST, (memri34_pcrel $D, $RA):$addr),
676
+ (ins f4rc:$RST, s34imm_pcrel:$D),
677
+ "pstfs $RST, $addr", "pstfs $RST, $D", IIC_LdStLFD>;
678
+ defm PSTFD :
679
+ MLS_DForm_R_SI34_RTA5_MEM_p<54, (outs), (ins f8rc:$RST, (memri34 $D, $RA):$addr),
680
+ (ins f8rc:$RST, (memri34_pcrel $D, $RA):$addr),
681
+ (ins f8rc:$RST, s34imm_pcrel:$D),
682
+ "pstfd $RST, $addr", "pstfd $RST, $D", IIC_LdStLFD>;
683
+ }
684
+ }
685
+
686
+ let Predicates = [PrefixInstrs, HasP10Vector] in {
687
+ let mayLoad = 1, mayStore = 0 in {
688
+ defm PLXV :
689
+ 8LS_DForm_R_SI34_XT6_RA5_MEM_p<25, (outs vsrc:$XST), (ins (memri34 $D, $RA):$addr),
690
+ (ins (memri34_pcrel $D, $RA):$addr),
691
+ (ins s34imm_pcrel:$D),
692
+ "plxv $XST, $addr", "plxv $XST, $D", IIC_LdStLFD>;
674
693
defm PLXSSP :
675
694
8LS_DForm_R_SI34_RTA5_MEM_p<43, (outs vfrc:$RST), (ins (memri34 $D, $RA):$addr),
676
695
(ins (memri34_pcrel $D, $RA):$addr),
@@ -683,6 +702,28 @@ let Predicates = [PrefixInstrs] in {
683
702
(ins s34imm_pcrel:$D),
684
703
"plxsd $RST, $addr", "plxsd $RST, $D",
685
704
IIC_LdStLFD>;
705
+ }
706
+ let mayStore = 1, mayLoad = 0 in {
707
+ defm PSTXV :
708
+ 8LS_DForm_R_SI34_XT6_RA5_MEM_p<27, (outs), (ins vsrc:$XST, (memri34 $D, $RA):$addr),
709
+ (ins vsrc:$XST, (memri34_pcrel $D, $RA):$addr),
710
+ (ins vsrc:$XST, s34imm_pcrel:$D),
711
+ "pstxv $XST, $addr", "pstxv $XST, $D", IIC_LdStLFD>;
712
+ defm PSTXSSP :
713
+ 8LS_DForm_R_SI34_RTA5_MEM_p<47, (outs), (ins vfrc:$RST, (memri34 $D, $RA):$addr),
714
+ (ins vfrc:$RST, (memri34_pcrel $D, $RA):$addr),
715
+ (ins vfrc:$RST, s34imm_pcrel:$D),
716
+ "pstxssp $RST, $addr", "pstxssp $RST, $D", IIC_LdStLFD>;
717
+ defm PSTXSD :
718
+ 8LS_DForm_R_SI34_RTA5_MEM_p<46, (outs), (ins vfrc:$RST, (memri34 $D, $RA):$addr),
719
+ (ins vfrc:$RST, (memri34_pcrel $D, $RA):$addr),
720
+ (ins vfrc:$RST, s34imm_pcrel:$D),
721
+ "pstxsd $RST, $addr", "pstxsd $RST, $D", IIC_LdStLFD>;
722
+ }
723
+ }
724
+
725
+ let Predicates = [PrefixInstrs] in {
726
+ let mayLoad = 1, mayStore = 0 in {
686
727
let Interpretation64Bit = 1, isCodeGenOnly = 1 in {
687
728
defm PLBZ8 :
688
729
MLS_DForm_R_SI34_RTA5_MEM_p<34, (outs g8rc:$RST), (ins (memri34 $D, $RA):$addr),
@@ -745,31 +786,6 @@ let Predicates = [PrefixInstrs] in {
745
786
}
746
787
747
788
let mayStore = 1, mayLoad = 0 in {
748
- defm PSTXV :
749
- 8LS_DForm_R_SI34_XT6_RA5_MEM_p<27, (outs), (ins vsrc:$XST, (memri34 $D, $RA):$addr),
750
- (ins vsrc:$XST, (memri34_pcrel $D, $RA):$addr),
751
- (ins vsrc:$XST, s34imm_pcrel:$D),
752
- "pstxv $XST, $addr", "pstxv $XST, $D", IIC_LdStLFD>;
753
- defm PSTFS :
754
- MLS_DForm_R_SI34_RTA5_MEM_p<52, (outs), (ins f4rc:$RST, (memri34 $D, $RA):$addr),
755
- (ins f4rc:$RST, (memri34_pcrel $D, $RA):$addr),
756
- (ins f4rc:$RST, s34imm_pcrel:$D),
757
- "pstfs $RST, $addr", "pstfs $RST, $D", IIC_LdStLFD>;
758
- defm PSTFD :
759
- MLS_DForm_R_SI34_RTA5_MEM_p<54, (outs), (ins f8rc:$RST, (memri34 $D, $RA):$addr),
760
- (ins f8rc:$RST, (memri34_pcrel $D, $RA):$addr),
761
- (ins f8rc:$RST, s34imm_pcrel:$D),
762
- "pstfd $RST, $addr", "pstfd $RST, $D", IIC_LdStLFD>;
763
- defm PSTXSSP :
764
- 8LS_DForm_R_SI34_RTA5_MEM_p<47, (outs), (ins vfrc:$RST, (memri34 $D, $RA):$addr),
765
- (ins vfrc:$RST, (memri34_pcrel $D, $RA):$addr),
766
- (ins vfrc:$RST, s34imm_pcrel:$D),
767
- "pstxssp $RST, $addr", "pstxssp $RST, $D", IIC_LdStLFD>;
768
- defm PSTXSD :
769
- 8LS_DForm_R_SI34_RTA5_MEM_p<46, (outs), (ins vfrc:$RST, (memri34 $D, $RA):$addr),
770
- (ins vfrc:$RST, (memri34_pcrel $D, $RA):$addr),
771
- (ins vfrc:$RST, s34imm_pcrel:$D),
772
- "pstxsd $RST, $addr", "pstxsd $RST, $D", IIC_LdStLFD>;
773
789
let Interpretation64Bit = 1, isCodeGenOnly = 1 in {
774
790
defm PSTB8 :
775
791
MLS_DForm_R_SI34_RTA5_MEM_p<38, (outs), (ins g8rc:$RST, (memri34 $D, $RA):$addr),
@@ -1136,7 +1152,7 @@ let mayLoad = 0, mayStore = 1, Predicates = [PairedVectorMemops] in {
1136
1152
[]>;
1137
1153
}
1138
1154
1139
- let mayLoad = 1, mayStore = 0, Predicates = [PairedVectorMemops, PrefixInstrs] in {
1155
+ let mayLoad = 1, mayStore = 0, Predicates = [PairedVectorMemops, PrefixInstrs, HasP10Vector ] in {
1140
1156
defm PLXVP :
1141
1157
8LS_DForm_R_XTp5_SI34_MEM_p<58, (outs vsrprc:$XTp), (ins (memri34 $D, $RA):$addr),
1142
1158
(ins (memri34_pcrel $D, $RA):$addr),
@@ -1145,7 +1161,7 @@ let mayLoad = 1, mayStore = 0, Predicates = [PairedVectorMemops, PrefixInstrs] i
1145
1161
IIC_LdStLFD>;
1146
1162
}
1147
1163
1148
- let mayLoad = 0, mayStore = 1, Predicates = [PairedVectorMemops, PrefixInstrs] in {
1164
+ let mayLoad = 0, mayStore = 1, Predicates = [PairedVectorMemops, PrefixInstrs, HasP10Vector ] in {
1149
1165
defm PSTXVP :
1150
1166
8LS_DForm_R_XTp5_SI34_MEM_p<62, (outs), (ins vsrprc:$XTp, (memri34 $D, $RA):$addr),
1151
1167
(ins vsrprc:$XTp, (memri34_pcrel $D, $RA):$addr),
@@ -1157,15 +1173,15 @@ let Predicates = [PairedVectorMemops] in {
1157
1173
// Intrinsics for Paired Vector Loads.
1158
1174
def : Pat<(v256i1 (int_ppc_vsx_lxvp DQForm:$src)), (LXVP memrix16:$src)>;
1159
1175
def : Pat<(v256i1 (int_ppc_vsx_lxvp XForm:$src)), (LXVPX XForm:$src)>;
1160
- let Predicates = [PairedVectorMemops, PrefixInstrs] in {
1176
+ let Predicates = [PairedVectorMemops, PrefixInstrs, HasP10Vector ] in {
1161
1177
def : Pat<(v256i1 (int_ppc_vsx_lxvp PDForm:$src)), (PLXVP memri34:$src)>;
1162
1178
}
1163
1179
// Intrinsics for Paired Vector Stores.
1164
1180
def : Pat<(int_ppc_vsx_stxvp v256i1:$XSp, DQForm:$dst),
1165
1181
(STXVP $XSp, memrix16:$dst)>;
1166
1182
def : Pat<(int_ppc_vsx_stxvp v256i1:$XSp, XForm:$dst),
1167
1183
(STXVPX $XSp, XForm:$dst)>;
1168
- let Predicates = [PairedVectorMemops, PrefixInstrs] in {
1184
+ let Predicates = [PairedVectorMemops, PrefixInstrs, HasP10Vector ] in {
1169
1185
def : Pat<(int_ppc_vsx_stxvp v256i1:$XSp, PDForm:$dst),
1170
1186
(PSTXVP $XSp, memri34:$dst)>;
1171
1187
}
@@ -1236,6 +1252,9 @@ let Predicates = [PCRelativeMemops] in {
1236
1252
def : Pat<(store i64:$RS, (PPCmatpcreladdr PCRelForm:$ga)),
1237
1253
(PSTDpc $RS, $ga, 0)>;
1238
1254
1255
+ }
1256
+
1257
+ let Predicates = [PCRelativeMemops, HasFPU] in {
1239
1258
// Load f32
1240
1259
def : Pat<(f32 (load (PPCmatpcreladdr PCRelForm:$addr))), (PLFSpc $addr, 0)>;
1241
1260
@@ -1252,6 +1271,11 @@ let Predicates = [PCRelativeMemops] in {
1252
1271
def : Pat<(store f64:$FRS, (PPCmatpcreladdr PCRelForm:$ga)),
1253
1272
(PSTFDpc $FRS, $ga, 0)>;
1254
1273
1274
+ def : Pat<(v4f32 (PPCldvsxlh (PPCmatpcreladdr PCRelForm:$addr))),
1275
+ (SUBREG_TO_REG (i64 1), (PLFDpc $addr, 0), sub_64)>;
1276
+ }
1277
+
1278
+ let Predicates = [PCRelativeMemops, HasP10Vector] in {
1255
1279
// Load f128
1256
1280
def : Pat<(f128 (load (PPCmatpcreladdr PCRelForm:$addr))),
1257
1281
(COPY_TO_REGCLASS (PLXVpc $addr, 0), VRRC)>;
@@ -1288,6 +1312,14 @@ let Predicates = [PCRelativeMemops] in {
1288
1312
def : Pat<(store v2f64:$XS, (PPCmatpcreladdr PCRelForm:$ga)),
1289
1313
(PSTXVpc $XS, $ga, 0)>;
1290
1314
1315
+ // Special Cases For PPCstore_scal_int_from_vsr
1316
+ def : Pat<(PPCstore_scal_int_from_vsr f64:$src, (PPCmatpcreladdr PCRelForm:$dst), 8),
1317
+ (PSTXSDpc $src, $dst, 0)>;
1318
+ def : Pat<(PPCstore_scal_int_from_vsr f128:$src, (PPCmatpcreladdr PCRelForm:$dst), 8),
1319
+ (PSTXSDpc (COPY_TO_REGCLASS $src, VFRC), $dst, 0)>;
1320
+ }
1321
+
1322
+ let Predicates = [PCRelativeMemops] in {
1291
1323
// Atomic Load
1292
1324
def : Pat<(i32 (atomic_load_8 (PPCmatpcreladdr PCRelForm:$ga))),
1293
1325
(PLBZpc $ga, 0)>;
@@ -1314,15 +1346,6 @@ let Predicates = [PCRelativeMemops] in {
1314
1346
def : Pat<(atomic_store_64 i64:$RS, (PPCmatpcreladdr PCRelForm:$ga)),
1315
1347
(PSTDpc $RS, $ga, 0)>;
1316
1348
1317
- // Special Cases For PPCstore_scal_int_from_vsr
1318
- def : Pat<(PPCstore_scal_int_from_vsr f64:$src, (PPCmatpcreladdr PCRelForm:$dst), 8),
1319
- (PSTXSDpc $src, $dst, 0)>;
1320
- def : Pat<(PPCstore_scal_int_from_vsr f128:$src, (PPCmatpcreladdr PCRelForm:$dst), 8),
1321
- (PSTXSDpc (COPY_TO_REGCLASS $src, VFRC), $dst, 0)>;
1322
-
1323
- def : Pat<(v4f32 (PPCldvsxlh (PPCmatpcreladdr PCRelForm:$addr))),
1324
- (SUBREG_TO_REG (i64 1), (PLFDpc $addr, 0), sub_64)>;
1325
-
1326
1349
// If the PPCmatpcreladdr node is not caught by any other pattern it should be
1327
1350
// caught here and turned into a paddi instruction to materialize the address.
1328
1351
def : Pat<(PPCmatpcreladdr PCRelForm:$addr), (PADDI8pc 0, $addr)>;
@@ -1335,7 +1358,7 @@ let Predicates = [PCRelativeMemops] in {
1335
1358
(PADDI8 $in, $addr)>;
1336
1359
}
1337
1360
1338
- let Predicates = [PrefixInstrs] in {
1361
+ let Predicates = [PrefixInstrs, HasP10Vector ] in {
1339
1362
def XXPERMX :
1340
1363
8RR_XX4Form_IMM3_XTABC6<34, 0, (outs vsrc:$XT), (ins vsrc:$XA, vsrc:$XB,
1341
1364
vsrc:$XC, u3imm:$IMM),
@@ -2142,7 +2165,7 @@ let AddedComplexity = 400, Predicates = [IsISA3_1, HasVSX] in {
2142
2165
class xxevalPattern <dag pattern, bits<8> imm> :
2143
2166
Pat<(v4i32 pattern), (XXEVAL $vA, $vB, $vC, imm)> {}
2144
2167
2145
- let AddedComplexity = 400, Predicates = [PrefixInstrs] in {
2168
+ let AddedComplexity = 400, Predicates = [PrefixInstrs, HasP10Vector ] in {
2146
2169
def : Pat<(v4i32 (build_vector i32immNonAllOneNonZero:$A,
2147
2170
i32immNonAllOneNonZero:$A,
2148
2171
i32immNonAllOneNonZero:$A,
@@ -2279,7 +2302,7 @@ def : Pat<(f64 nzFPImmAsi64:$A),
2279
2302
(PSTXSD (COPY_TO_REGCLASS $src, VFRC), PDForm:$dst)>;
2280
2303
}
2281
2304
2282
- let Predicates = [PrefixInstrs] in {
2305
+ let Predicates = [PrefixInstrs, HasP10Vector ] in {
2283
2306
def : Pat<(i32 imm34:$imm), (PLI (getImmAs64BitInt imm:$imm))>;
2284
2307
def : Pat<(i64 imm34:$imm), (PLI8 (getImmAs64BitInt imm:$imm))>;
2285
2308
def : Pat<(v16i8 (int_ppc_vsx_xxpermx v16i8:$A, v16i8:$B, v16i8:$C, timm:$D)),
@@ -2300,7 +2323,9 @@ let Predicates = [PrefixInstrs] in {
2300
2323
(XXBLENDVW $A, $B, $C)>;
2301
2324
def : Pat<(int_ppc_vsx_xxblendvd v2i64:$A, v2i64:$B, v2i64:$C),
2302
2325
(XXBLENDVD $A, $B, $C)>;
2326
+ }
2303
2327
2328
+ let Predicates = [PrefixInstrs] in {
2304
2329
// Anonymous patterns to select prefixed loads and stores.
2305
2330
// Load i32
2306
2331
def : Pat<(i32 (extloadi1 PDForm:$src)), (PLBZ memri34:$src)>;
@@ -2335,7 +2360,9 @@ let Predicates = [PrefixInstrs] in {
2335
2360
def : Pat<(truncstorei16 i64:$rS, PDForm:$dst), (PSTH8 g8rc:$rS, memri34:$dst)>;
2336
2361
def : Pat<(truncstorei32 i64:$rS, PDForm:$dst), (PSTW8 g8rc:$rS, memri34:$dst)>;
2337
2362
def : Pat<(store i64:$rS, PDForm:$dst), (PSTD g8rc:$rS, memri34:$dst)>;
2363
+ }
2338
2364
2365
+ let Predicates = [PrefixInstrs, HasFPU] in {
2339
2366
// Load / Store f32
2340
2367
def : Pat<(f32 (load PDForm:$src)), (PLFS memri34:$src)>;
2341
2368
def : Pat<(store f32:$FRS, PDForm:$dst), (PSTFS $FRS, memri34:$dst)>;
@@ -2345,7 +2372,13 @@ let Predicates = [PrefixInstrs] in {
2345
2372
(COPY_TO_REGCLASS (PLFS memri34:$src), VSFRC)>;
2346
2373
def : Pat<(f64 (load PDForm:$src)), (PLFD memri34:$src)>;
2347
2374
def : Pat<(store f64:$FRS, PDForm:$dst), (PSTFD $FRS, memri34:$dst)>;
2375
+ // Prefixed fpext to v2f64
2376
+ def : Pat<(v4f32 (PPCldvsxlh PDForm:$src)),
2377
+ (SUBREG_TO_REG (i64 1), (PLFD PDForm:$src), sub_64)>;
2348
2378
2379
+ }
2380
+
2381
+ let Predicates = [PrefixInstrs] in {
2349
2382
// Atomic Load
2350
2383
def : Pat<(i32 (atomic_load_8 PDForm:$src)), (PLBZ memri34:$src)>;
2351
2384
def : Pat<(i32 (atomic_load_16 PDForm:$src)), (PLHZ memri34:$src)>;
@@ -2357,10 +2390,6 @@ let Predicates = [PrefixInstrs] in {
2357
2390
def : Pat<(atomic_store_16 i32:$RS, PDForm:$dst), (PSTH $RS, memri34:$dst)>;
2358
2391
def : Pat<(atomic_store_32 i32:$RS, PDForm:$dst), (PSTW $RS, memri34:$dst)>;
2359
2392
def : Pat<(atomic_store_64 i64:$RS, PDForm:$dst), (PSTD $RS, memri34:$dst)>;
2360
-
2361
- // Prefixed fpext to v2f64
2362
- def : Pat<(v4f32 (PPCldvsxlh PDForm:$src)),
2363
- (SUBREG_TO_REG (i64 1), (PLFD PDForm:$src), sub_64)>;
2364
2393
}
2365
2394
2366
2395
def InsertEltShift {
0 commit comments