Skip to content

Commit 3812d3a

Browse files
committed
[PowerPC] Update instruction implementation for ISA3.0+
1 parent 9226668 commit 3812d3a

File tree

8 files changed

+62
-16
lines changed

8 files changed

+62
-16
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: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4321,7 +4321,24 @@ 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+
//let isCodeGenOnly = 1 in {
4329+
def TLBIEP9 : XForm_RSB5_UIMM2_2UIMM1<31, 306, (outs),
4330+
(ins gprc:$RB, gprc:$RS, u2imm:$RIC,
4331+
u1imm:$PRS, u1imm:$R),
4332+
"tlbie $RB, $RS, $RIC, $PRS, $R", []>;
4333+
//}
4334+
let Interpretation64Bit = 1, isCodeGenOnly = 1 in {
4335+
def TLBIE8P9
4336+
: XForm_RSB5_UIMM2_2UIMM1<31, 306, (outs),
4337+
(ins g8rc:$RB, g8rc:$RS, u2imm:$RIC,
4338+
u1imm:$PRS, u1imm:$R),
4339+
"tlbie $RB, $RS, $RIC, $PRS, $R", []>;
4340+
}
4341+
}
43254342

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

46684685
}
46694686

4670-
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+
}
46714692

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

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)