Skip to content

Commit 8e9647c

Browse files
lei137aokblast
authored andcommitted
[PowerPC] Update tlbie instruction implementation for ISA3.0+ (llvm#162729)
The instruction `tlbie` changed in ISA3.0. ISA V2.07: `tlbie RB,RS` ISA V3.0: `tlbie RB,RS,RIC,PRS,R`, with `tlbie RB,RS` aliased to `tlbie RB,RS,0,0,0`
1 parent aaea711 commit 8e9647c

File tree

10 files changed

+72
-28
lines changed

10 files changed

+72
-28
lines changed

llvm/lib/Target/PowerPC/P10InstrResources.td

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -825,17 +825,15 @@ def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read, P10F2_Read],
825825
def : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_DISP_ANY, P10F2_Read],
826826
(instrs
827827
SRADI_rec,
828-
SRAWI_rec,
829-
SRAWI8_rec
828+
SRAWI8_rec, SRAWI_rec
830829
)>;
831830

832831
// Single crack instructions
833832
// 4 Cycles ALU2 operations, 2 input operands
834833
def : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_DISP_ANY, P10F2_Read, P10F2_Read],
835834
(instrs
836835
SRAD_rec,
837-
SRAW_rec,
838-
SRAW8_rec
836+
SRAW8_rec, SRAW_rec
839837
)>;
840838

841839
// 2-way crack instructions
@@ -883,7 +881,7 @@ def : InstRW<[P10W_FX_3C, P10W_DISP_ANY],
883881
// 3 Cycles ALU operations, 1 input operands
884882
def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read],
885883
(instrs
886-
ADDI, ADDI8, ADDIdtprelL32, ADDItlsldLADDR32, ADDItocL, ADDItocL8, LI, LI8,
884+
ADDI, ADDI8, ADDIdtprelL32, ADDItlsldLADDR32, ADDItocL, LI, LI8,
887885
ADDIC, ADDIC8,
888886
ADDIS, ADDIS8, ADDISdtprelHA32, ADDIStocHA, ADDIStocHA8, LIS, LIS8,
889887
ADDME, ADDME8,
@@ -1864,7 +1862,7 @@ def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10ST_Read, P10ST_Read]
18641862
(instrs
18651863
CP_PASTE8_rec, CP_PASTE_rec,
18661864
SLBIEG,
1867-
TLBIE
1865+
TLBIE, TLBIE8P9, TLBIEP9
18681866
)>;
18691867

18701868
// Single crack instructions
@@ -1886,8 +1884,7 @@ def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10ST_Read, P10ST_Read,
18861884
def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
18871885
(instrs
18881886
ISYNC,
1889-
SYNCP10,
1890-
SYNC
1887+
SYNC, SYNCP10
18911888
)>;
18921889

18931890
// Expand instructions

llvm/lib/Target/PowerPC/P9InstrResources.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -905,7 +905,7 @@ def : InstRW<[P9_LS_1C, IP_EXEC_1C, IP_AGEN_1C, DISP_3SLOTS_1C],
905905
SLBIEG,
906906
STMW,
907907
STSWI,
908-
TLBIE
908+
TLBIE, TLBIEP9, TLBIE8P9
909909
)>;
910910

911911
// Vector Store Instruction

llvm/lib/Target/PowerPC/PPC.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,7 @@ def HasP10Vector : Predicate<"Subtarget->hasP10Vector()">;
409409
def IsISA2_06 : Predicate<"Subtarget->isISA2_06()">;
410410
def IsISA2_07 : Predicate<"Subtarget->isISA2_07()">;
411411
def IsISA3_0 : Predicate<"Subtarget->isISA3_0()">;
412+
def IsNotISA3_0 : Predicate<"!Subtarget->isISA3_0()">;
412413
def IsISA3_1 : Predicate<"Subtarget->isISA3_1()">;
413414
def IsNotISA3_1 : Predicate<"!Subtarget->isISA3_1()">;
414415
def IsISAFuture : Predicate<"Subtarget->isISAFuture()">;

llvm/lib/Target/PowerPC/PPCBack2BackFusion.def

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ FUSION_FEATURE(GeneralBack2Back, hasBack2BackFusion, -1,
2929
ADDIStocHA8,
3030
ADDIdtprelL32,
3131
ADDItlsldLADDR32,
32-
ADDItocL8,
32+
ADDItocL,
3333
ADDME,
3434
ADDME8,
3535
ADDME8O,
@@ -209,7 +209,9 @@ FUSION_FEATURE(GeneralBack2Back, hasBack2BackFusion, -1,
209209
SRADI,
210210
SRADI_32,
211211
SRAW,
212+
SRAW8,
212213
SRAWI,
214+
SRAWI8,
213215
SRD,
214216
SRD_rec,
215217
SRW,
@@ -518,7 +520,7 @@ FUSION_FEATURE(GeneralBack2Back, hasBack2BackFusion, -1,
518520
ADDIStocHA8,
519521
ADDIdtprelL32,
520522
ADDItlsldLADDR32,
521-
ADDItocL8,
523+
ADDItocL,
522524
ADDME,
523525
ADDME8,
524526
ADDME8O,
@@ -747,7 +749,9 @@ FUSION_FEATURE(GeneralBack2Back, hasBack2BackFusion, -1,
747749
SRADI,
748750
SRADI_32,
749751
SRAW,
752+
SRAW8,
750753
SRAWI,
754+
SRAWI8,
751755
SRD,
752756
SRD_rec,
753757
SRW,

llvm/lib/Target/PowerPC/PPCInstrFormats.td

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -850,6 +850,26 @@ class XForm_45<bits<6> opcode, bits<10> xo, dag OOL, dag IOL, string asmstr,
850850
let Inst{31} = 0;
851851
}
852852

853+
class XForm_RSB5_UIMM2_2UIMM1<bits<6> opcode, bits<10> xo, dag OOL, dag IOL,
854+
string asmstr, list<dag> pattern>
855+
: I<opcode, OOL, IOL, asmstr, NoItinerary> {
856+
857+
bits<5> RS;
858+
bits<5> RB;
859+
bits<2> RIC;
860+
bits<1> PRS;
861+
bits<1> R;
862+
863+
let Pattern = pattern;
864+
865+
let Inst{6...10} = RS;
866+
let Inst{12...13} = RIC;
867+
let Inst{14} = PRS;
868+
let Inst{15} = R;
869+
let Inst{16...20} = RB;
870+
let Inst{21...30} = xo;
871+
}
872+
853873
class X_FRT5_XO2_XO3_XO10<bits<6> opcode, bits<2> xo1, bits<3> xo2, bits<10> xo,
854874
dag OOL, dag IOL, string asmstr, InstrItinClass itin,
855875
list<dag> pattern>

llvm/lib/Target/PowerPC/PPCInstrInfo.td

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4321,7 +4321,22 @@ def TLBLI : XForm_16b<31, 1010, (outs), (ins gprc:$RB),
43214321
"tlbli $RB", IIC_LdStLoad, []>, Requires<[IsPPC6xx]>;
43224322

43234323
def TLBIE : XForm_26<31, 306, (outs), (ins gprc:$RST, gprc:$RB),
4324-
"tlbie $RB,$RST", IIC_SprTLBIE, []>;
4324+
"tlbie $RB, $RST", IIC_SprTLBIE, []>,
4325+
Requires<[IsNotISA3_0]>;
4326+
4327+
let Predicates = [IsISA3_0] in {
4328+
def TLBIEP9 : XForm_RSB5_UIMM2_2UIMM1<31, 306, (outs),
4329+
(ins gprc:$RB, gprc:$RS, u2imm:$RIC,
4330+
u1imm:$PRS, u1imm:$R),
4331+
"tlbie $RB, $RS, $RIC, $PRS, $R", []>;
4332+
let Interpretation64Bit = 1, isCodeGenOnly = 1 in {
4333+
def TLBIE8P9
4334+
: XForm_RSB5_UIMM2_2UIMM1<31, 306, (outs),
4335+
(ins g8rc:$RB, g8rc:$RS, u2imm:$RIC,
4336+
u1imm:$PRS, u1imm:$R),
4337+
"tlbie $RB, $RS, $RIC, $PRS, $R", []>;
4338+
}
4339+
}
43254340

43264341
def TLBSX : XForm_tlb<914, (outs), (ins gprc:$RA, gprc:$RB), "tlbsx $RA, $RB",
43274342
IIC_LdStLoad>, Requires<[IsBookE]>;
@@ -4669,7 +4684,11 @@ def : InstAlias<"mficcr $Rx", (MFSPR gprc:$Rx, 1019)>, Requires<[IsPPC4xx]>;
46694684

46704685
}
46714686

4672-
def : InstAlias<"tlbie $RB", (TLBIE R0, gprc:$RB)>;
4687+
def : InstAlias<"tlbie $RB", (TLBIE R0, gprc:$RB)>, Requires<[IsNotISA3_0]>;
4688+
let Predicates = [IsISA3_0] in {
4689+
def : InstAlias<"tlbie $RB", (TLBIEP9 R0, gprc:$RB, 0, 0, 0)>;
4690+
def : InstAlias<"tlbie $RB, $RS", (TLBIEP9 gprc:$RB, gprc:$RS, 0, 0, 0)>;
4691+
}
46734692

46744693
def : InstAlias<"tlbrehi $RS, $A", (TLBRE2 gprc:$RS, gprc:$A, 0)>,
46754694
Requires<[IsPPC4xx]>;

llvm/test/CodeGen/PowerPC/p10-spill-crun.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,8 @@ define dso_local void @P10_Spill_CR_UN(ptr %arg, ptr %arg1, i32 %arg2) local_unn
234234
; CHECK-BE-NEXT: # %bb.4: # %bb37
235235
; CHECK-BE-NEXT: bc 4, 4*cr5+lt, .LBB0_14
236236
; CHECK-BE-NEXT: .LBB0_5: # %bb42
237-
; CHECK-BE-NEXT: addi r3, r3, global_1@toc@l
238237
; CHECK-BE-NEXT: li r4, 0
238+
; CHECK-BE-NEXT: addi r3, r3, global_1@toc@l
239239
; CHECK-BE-NEXT: cmpwi r28, 0
240240
; CHECK-BE-NEXT: isel r3, r3, r4, 4*cr2+gt
241241
; CHECK-BE-NEXT: crnot 4*cr2+lt, eq

llvm/test/CodeGen/PowerPC/vector-reduce-add.ll

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1085,14 +1085,14 @@ define dso_local signext i32 @v16i8tov16i32_sign(<16 x i8> %a) local_unnamed_add
10851085
; PWR10BE-NEXT: addis r3, r2, .LCPI17_2@toc@ha
10861086
; PWR10BE-NEXT: vperm v3, v2, v2, v3
10871087
; PWR10BE-NEXT: addi r3, r3, .LCPI17_2@toc@l
1088-
; PWR10BE-NEXT: vextsb2w v3, v3
10891088
; PWR10BE-NEXT: lxv v5, 0(r3)
10901089
; PWR10BE-NEXT: addis r3, r2, .LCPI17_3@toc@ha
1090+
; PWR10BE-NEXT: vextsb2w v3, v3
10911091
; PWR10BE-NEXT: vperm v4, v2, v2, v4
10921092
; PWR10BE-NEXT: addi r3, r3, .LCPI17_3@toc@l
1093-
; PWR10BE-NEXT: vextsb2w v4, v4
10941093
; PWR10BE-NEXT: lxv v0, 0(r3)
10951094
; PWR10BE-NEXT: li r3, 0
1095+
; PWR10BE-NEXT: vextsb2w v4, v4
10961096
; PWR10BE-NEXT: vperm v5, v2, v2, v5
10971097
; PWR10BE-NEXT: vadduwm v3, v4, v3
10981098
; PWR10BE-NEXT: vextsb2w v5, v5
@@ -1212,9 +1212,9 @@ define dso_local zeroext i32 @v16i8tov16i32_zero(<16 x i8> %a) local_unnamed_add
12121212
; PWR10BE-NEXT: addis r3, r2, .LCPI18_3@toc@ha
12131213
; PWR10BE-NEXT: vperm v5, v4, v2, v5
12141214
; PWR10BE-NEXT: addi r3, r3, .LCPI18_3@toc@l
1215-
; PWR10BE-NEXT: vadduwm v3, v5, v3
12161215
; PWR10BE-NEXT: lxv v1, 0(r3)
12171216
; PWR10BE-NEXT: li r3, 0
1217+
; PWR10BE-NEXT: vadduwm v3, v5, v3
12181218
; PWR10BE-NEXT: vperm v0, v4, v2, v0
12191219
; PWR10BE-NEXT: vperm v2, v4, v2, v1
12201220
; PWR10BE-NEXT: vadduwm v2, v2, v0
@@ -1568,41 +1568,41 @@ define dso_local i64 @v16i8tov16i64_sign(<16 x i8> %a) local_unnamed_addr #0 {
15681568
; PWR10BE-NEXT: addis r3, r2, .LCPI23_0@toc@ha
15691569
; PWR10BE-NEXT: xxspltib v1, 255
15701570
; PWR10BE-NEXT: addi r3, r3, .LCPI23_0@toc@l
1571-
; PWR10BE-NEXT: vsrq v1, v1, v1
15721571
; PWR10BE-NEXT: lxv v3, 0(r3)
15731572
; PWR10BE-NEXT: addis r3, r2, .LCPI23_1@toc@ha
1573+
; PWR10BE-NEXT: vsrq v1, v1, v1
15741574
; PWR10BE-NEXT: addi r3, r3, .LCPI23_1@toc@l
15751575
; PWR10BE-NEXT: vperm v1, v2, v2, v1
15761576
; PWR10BE-NEXT: lxv v4, 0(r3)
15771577
; PWR10BE-NEXT: addis r3, r2, .LCPI23_2@toc@ha
1578-
; PWR10BE-NEXT: vextsb2d v1, v1
15791578
; PWR10BE-NEXT: vperm v3, v2, v2, v3
1579+
; PWR10BE-NEXT: vextsb2d v1, v1
15801580
; PWR10BE-NEXT: addi r3, r3, .LCPI23_2@toc@l
1581-
; PWR10BE-NEXT: vextsb2d v3, v3
15821581
; PWR10BE-NEXT: lxv v5, 0(r3)
15831582
; PWR10BE-NEXT: addis r3, r2, .LCPI23_3@toc@ha
1583+
; PWR10BE-NEXT: vextsb2d v3, v3
15841584
; PWR10BE-NEXT: vperm v4, v2, v2, v4
15851585
; PWR10BE-NEXT: addi r3, r3, .LCPI23_3@toc@l
1586-
; PWR10BE-NEXT: vextsb2d v4, v4
15871586
; PWR10BE-NEXT: lxv v0, 0(r3)
15881587
; PWR10BE-NEXT: addis r3, r2, .LCPI23_4@toc@ha
1588+
; PWR10BE-NEXT: vextsb2d v4, v4
15891589
; PWR10BE-NEXT: vperm v5, v2, v2, v5
15901590
; PWR10BE-NEXT: addi r3, r3, .LCPI23_4@toc@l
1591-
; PWR10BE-NEXT: vextsb2d v5, v5
15921591
; PWR10BE-NEXT: lxv v6, 0(r3)
15931592
; PWR10BE-NEXT: addis r3, r2, .LCPI23_5@toc@ha
1593+
; PWR10BE-NEXT: vextsb2d v5, v5
15941594
; PWR10BE-NEXT: vperm v0, v2, v2, v0
15951595
; PWR10BE-NEXT: addi r3, r3, .LCPI23_5@toc@l
1596-
; PWR10BE-NEXT: vextsb2d v0, v0
15971596
; PWR10BE-NEXT: lxv v7, 0(r3)
15981597
; PWR10BE-NEXT: addis r3, r2, .LCPI23_6@toc@ha
1598+
; PWR10BE-NEXT: vextsb2d v0, v0
15991599
; PWR10BE-NEXT: vperm v6, v2, v2, v6
1600+
; PWR10BE-NEXT: addi r3, r3, .LCPI23_6@toc@l
16001601
; PWR10BE-NEXT: vaddudm v5, v0, v5
16011602
; PWR10BE-NEXT: vaddudm v3, v4, v3
16021603
; PWR10BE-NEXT: vaddudm v3, v3, v5
1603-
; PWR10BE-NEXT: addi r3, r3, .LCPI23_6@toc@l
1604-
; PWR10BE-NEXT: vextsb2d v6, v6
16051604
; PWR10BE-NEXT: lxv v8, 0(r3)
1605+
; PWR10BE-NEXT: vextsb2d v6, v6
16061606
; PWR10BE-NEXT: vperm v7, v2, v2, v7
16071607
; PWR10BE-NEXT: vextsb2d v7, v7
16081608
; PWR10BE-NEXT: vperm v2, v2, v2, v8

llvm/test/MC/Disassembler/PowerPC/ppc64-encoding-bookIII.txt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,9 +111,6 @@
111111
# CHECK: tlbie 4
112112
0x7c 0x00 0x22 0x64
113113

114-
# CHECK: tlbie 4
115-
0x7c 0x00 0x22 0x64
116-
117114
# CHECK: rfi
118115
0x4c 0x00 0x00 0x64
119116
# CHECK: rfci

llvm/test/MC/Disassembler/PowerPC/ppc64-encoding-p9vector.txt renamed to llvm/test/MC/Disassembler/PowerPC/ppc64-encoding-p9.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,9 @@
22

33
# CHECK: mtvsrdd 6, 0, 3
44
0x66 0x1b 0xc0 0x7c
5+
6+
# CHECK: tlbie 8, 10
7+
0x64, 0x42, 0x40, 0x7d
8+
9+
# CHECK: tlbie 8, 10, 2, 1, 0
10+
0x64, 0x42, 0x4a, 0x7d

0 commit comments

Comments
 (0)