Skip to content

Commit 213a939

Browse files
authored
[LegalizeDAG] Use Base+Offset instead of Offset+Base for jump tables
This is needed for architectures that actually use strict pointer arithmetic instead of integers such as AArch64 with FEAT_CPA (see llvm#105669) or CHERI. Using an index as the first operand of pointer arithmetic may result in an invalid output. While there are quite a few codegen changes here, these only change the order of registers in add instructions. One MIPS combine had to be updated to handle the new node order. Reviewed By: topperc Pull Request: llvm#125279
1 parent c641c1a commit 213a939

22 files changed

+81
-75
lines changed

llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3970,8 +3970,7 @@ bool SelectionDAGLegalize::ExpandNode(SDNode *Node) {
39703970
else
39713971
Index = DAG.getNode(ISD::MUL, dl, Index.getValueType(), Index,
39723972
DAG.getConstant(EntrySize, dl, Index.getValueType()));
3973-
SDValue Addr = DAG.getNode(ISD::ADD, dl, Index.getValueType(),
3974-
Index, Table);
3973+
SDValue Addr = DAG.getMemBasePlusOffset(Table, Index, dl);
39753974

39763975
EVT MemVT = EVT::getIntegerVT(*DAG.getContext(), EntrySize * 8);
39773976
SDValue LD = DAG.getExtLoad(
@@ -3980,10 +3979,10 @@ bool SelectionDAGLegalize::ExpandNode(SDNode *Node) {
39803979
Addr = LD;
39813980
if (TLI.isJumpTableRelative()) {
39823981
// For PIC, the sequence is:
3983-
// BRIND(load(Jumptable + index) + RelocBase)
3982+
// BRIND(RelocBase + load(Jumptable + index))
39843983
// RelocBase can be JumpTable, GOT or some sort of global base.
3985-
Addr = DAG.getNode(ISD::ADD, dl, PTy, Addr,
3986-
TLI.getPICJumpTableRelocBase(Table, DAG));
3984+
Addr = DAG.getMemBasePlusOffset(TLI.getPICJumpTableRelocBase(Table, DAG),
3985+
Addr, dl);
39873986
}
39883987

39893988
Tmp1 = TLI.expandIndirectJTBranch(dl, LD.getValue(1), Addr, JTI, DAG);

llvm/lib/Target/Mips/MipsISelLowering.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1138,13 +1138,21 @@ static SDValue performADDCombine(SDNode *N, SelectionDAG &DAG,
11381138
return SDValue();
11391139
}
11401140

1141+
// When loading from a jump table, push the Lo node to the position that
1142+
// allows folding it into a load immediate.
11411143
// (add v0, (add v1, abs_lo(tjt))) => (add (add v0, v1), abs_lo(tjt))
1142-
SDValue Add = N->getOperand(1);
1143-
1144-
if (Add.getOpcode() != ISD::ADD)
1144+
// (add (add abs_lo(tjt), v1), v0) => (add (add v0, v1), abs_lo(tjt))
1145+
SDValue InnerAdd = N->getOperand(1);
1146+
SDValue Index = N->getOperand(0);
1147+
if (InnerAdd.getOpcode() != ISD::ADD)
1148+
std::swap(InnerAdd, Index);
1149+
if (InnerAdd.getOpcode() != ISD::ADD)
11451150
return SDValue();
11461151

1147-
SDValue Lo = Add.getOperand(1);
1152+
SDValue Lo = InnerAdd.getOperand(0);
1153+
SDValue Other = InnerAdd.getOperand(1);
1154+
if (Lo.getOpcode() != MipsISD::Lo)
1155+
std::swap(Lo, Other);
11481156

11491157
if ((Lo.getOpcode() != MipsISD::Lo) ||
11501158
(Lo.getOperand(0).getOpcode() != ISD::TargetJumpTable))
@@ -1153,8 +1161,7 @@ static SDValue performADDCombine(SDNode *N, SelectionDAG &DAG,
11531161
EVT ValTy = N->getValueType(0);
11541162
SDLoc DL(N);
11551163

1156-
SDValue Add1 = DAG.getNode(ISD::ADD, DL, ValTy, N->getOperand(0),
1157-
Add.getOperand(0));
1164+
SDValue Add1 = DAG.getNode(ISD::ADD, DL, ValTy, Index, Other);
11581165
return DAG.getNode(ISD::ADD, DL, ValTy, Add1, Lo);
11591166
}
11601167

llvm/test/CodeGen/LoongArch/annotate-tablejump.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ define void @switch_4_arms(i32 %in, ptr %out) nounwind {
5757
; LA64-JT-NEXT: slli.d $a3, $a3, 3
5858
; LA64-JT-NEXT: pcalau12i $a4, %pc_hi20(.LJTI0_0)
5959
; LA64-JT-NEXT: addi.d $a4, $a4, %pc_lo12(.LJTI0_0)
60-
; LA64-JT-NEXT: ldx.d $a3, $a3, $a4
60+
; LA64-JT-NEXT: ldx.d $a3, $a4, $a3
6161
; LA64-JT-NEXT: .Ljrtb_0:
6262
; LA64-JT-NEXT: jr $a3
6363
; LA64-JT-NEXT: .LBB0_2: # %bb1
@@ -80,7 +80,7 @@ define void @switch_4_arms(i32 %in, ptr %out) nounwind {
8080
; LA64-JT-NEXT: slli.d $a3, $a3, 3
8181
; LA64-JT-NEXT: pcalau12i $a4, %pc_hi20(.LJTI0_1)
8282
; LA64-JT-NEXT: addi.d $a4, $a4, %pc_lo12(.LJTI0_1)
83-
; LA64-JT-NEXT: ldx.d $a3, $a3, $a4
83+
; LA64-JT-NEXT: ldx.d $a3, $a4, $a3
8484
; LA64-JT-NEXT: .Ljrtb_1:
8585
; LA64-JT-NEXT: jr $a3
8686
; LA64-JT-NEXT: .LBB0_9: # %exit2

llvm/test/CodeGen/LoongArch/jr-without-ra.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ define void @jr_without_ra(ptr %rtwdev, ptr %chan, ptr %h2c, i8 %.pre, i1 %cmp.i
7878
; CHECK-NEXT: # %bb.6: # %calc_6g.i
7979
; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=1
8080
; CHECK-NEXT: slli.d $s8, $zero, 3
81-
; CHECK-NEXT: ldx.d $s8, $s8, $s1
81+
; CHECK-NEXT: ldx.d $s8, $s1, $s8
8282
; CHECK-NEXT: jr $s8
8383
; CHECK-NEXT: .LBB0_7: # %sw.bb12.i.i
8484
; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=1
@@ -113,7 +113,7 @@ define void @jr_without_ra(ptr %rtwdev, ptr %chan, ptr %h2c, i8 %.pre, i1 %cmp.i
113113
; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=1
114114
; CHECK-NEXT: pcalau12i $ra, %pc_hi20(.LJTI0_1)
115115
; CHECK-NEXT: addi.d $ra, $ra, %pc_lo12(.LJTI0_1)
116-
; CHECK-NEXT: ldx.d $s5, $s4, $ra
116+
; CHECK-NEXT: ldx.d $s5, $ra, $s4
117117
; CHECK-NEXT: jr $s5
118118
; CHECK-NEXT: .LBB0_13: # %phy_tssi_get_ofdm_trim_de.exit
119119
; CHECK-NEXT: # in Loop: Header=BB0_4 Depth=1

llvm/test/CodeGen/LoongArch/jump-table.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ define void @switch_4_arms(i32 %in, ptr %out) nounwind {
116116
; LA64-JT-NEXT: slli.d $a0, $a0, 3
117117
; LA64-JT-NEXT: pcalau12i $a2, %pc_hi20(.LJTI0_0)
118118
; LA64-JT-NEXT: addi.d $a2, $a2, %pc_lo12(.LJTI0_0)
119-
; LA64-JT-NEXT: ldx.d $a0, $a0, $a2
119+
; LA64-JT-NEXT: ldx.d $a0, $a2, $a0
120120
; LA64-JT-NEXT: jr $a0
121121
; LA64-JT-NEXT: .LBB0_2: # %bb1
122122
; LA64-JT-NEXT: ori $a0, $zero, 4

llvm/test/CodeGen/Mips/2010-07-20-Switch.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ define i32 @main() nounwind readnone {
6666
; PIC-O32-NEXT: lw $3, %got($JTI0_0)($2)
6767
; PIC-O32-NEXT: addu $1, $1, $3
6868
; PIC-O32-NEXT: lw $1, %lo($JTI0_0)($1)
69-
; PIC-O32-NEXT: addu $1, $1, $2
69+
; PIC-O32-NEXT: addu $1, $2, $1
7070
; PIC-O32-NEXT: jr $1
7171
; PIC-O32-NEXT: nop
7272
; PIC-O32-NEXT: $BB0_2: # %bb5
@@ -109,7 +109,7 @@ define i32 @main() nounwind readnone {
109109
; PIC-N64-NEXT: ld $3, %got_page(.LJTI0_0)($1)
110110
; PIC-N64-NEXT: daddu $2, $2, $3
111111
; PIC-N64-NEXT: ld $2, %got_ofst(.LJTI0_0)($2)
112-
; PIC-N64-NEXT: daddu $1, $2, $1
112+
; PIC-N64-NEXT: daddu $1, $1, $2
113113
; PIC-N64-NEXT: jr $1
114114
; PIC-N64-NEXT: nop
115115
; PIC-N64-NEXT: .LBB0_2: # %bb5

llvm/test/CodeGen/Mips/indirect-jump-hazard/jumptables.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ define ptr @_Z3fooi(i32 signext %Letter) {
356356
; PIC-MIPS32R2-NEXT: lw $3, %got($JTI0_0)($2)
357357
; PIC-MIPS32R2-NEXT: addu $1, $1, $3
358358
; PIC-MIPS32R2-NEXT: lw $1, %lo($JTI0_0)($1)
359-
; PIC-MIPS32R2-NEXT: addu $1, $1, $2
359+
; PIC-MIPS32R2-NEXT: addu $1, $2, $1
360360
; PIC-MIPS32R2-NEXT: jr.hb $1
361361
; PIC-MIPS32R2-NEXT: nop
362362
; PIC-MIPS32R2-NEXT: $BB0_2: # %sw.bb
@@ -418,7 +418,7 @@ define ptr @_Z3fooi(i32 signext %Letter) {
418418
; PIC-MIPS32R6-NEXT: lw $3, %got($JTI0_0)($2)
419419
; PIC-MIPS32R6-NEXT: addu $1, $1, $3
420420
; PIC-MIPS32R6-NEXT: lw $1, %lo($JTI0_0)($1)
421-
; PIC-MIPS32R6-NEXT: addu $1, $1, $2
421+
; PIC-MIPS32R6-NEXT: addu $1, $2, $1
422422
; PIC-MIPS32R6-NEXT: jr.hb $1
423423
; PIC-MIPS32R6-NEXT: nop
424424
; PIC-MIPS32R6-NEXT: $BB0_2: # %sw.bb
@@ -481,7 +481,7 @@ define ptr @_Z3fooi(i32 signext %Letter) {
481481
; PIC-MIPS64R2-NEXT: ld $3, %got_page(.LJTI0_0)($2)
482482
; PIC-MIPS64R2-NEXT: daddu $1, $1, $3
483483
; PIC-MIPS64R2-NEXT: ld $1, %got_ofst(.LJTI0_0)($1)
484-
; PIC-MIPS64R2-NEXT: daddu $1, $1, $2
484+
; PIC-MIPS64R2-NEXT: daddu $1, $2, $1
485485
; PIC-MIPS64R2-NEXT: jr.hb $1
486486
; PIC-MIPS64R2-NEXT: nop
487487
; PIC-MIPS64R2-NEXT: .LBB0_2: # %sw.bb
@@ -544,7 +544,7 @@ define ptr @_Z3fooi(i32 signext %Letter) {
544544
; PIC-MIPS64R6-NEXT: ld $3, %got_page(.LJTI0_0)($2)
545545
; PIC-MIPS64R6-NEXT: daddu $1, $1, $3
546546
; PIC-MIPS64R6-NEXT: ld $1, %got_ofst(.LJTI0_0)($1)
547-
; PIC-MIPS64R6-NEXT: daddu $1, $1, $2
547+
; PIC-MIPS64R6-NEXT: daddu $1, $2, $1
548548
; PIC-MIPS64R6-NEXT: jr.hb $1
549549
; PIC-MIPS64R6-NEXT: nop
550550
; PIC-MIPS64R6-NEXT: .LBB0_2: # %sw.bb

llvm/test/CodeGen/Mips/jump-table-mul.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ define i64 @test(i64 %arg) {
1616
; CHECK-NEXT: ld $3, %got_page(.LJTI0_0)($1)
1717
; CHECK-NEXT: daddu $2, $2, $3
1818
; CHECK-NEXT: ld $2, %got_ofst(.LJTI0_0)($2)
19-
; CHECK-NEXT: daddu $1, $2, $1
19+
; CHECK-NEXT: daddu $1, $1, $2
2020
; CHECK-NEXT: jr $1
2121
; CHECK-NEXT: nop
2222
; CHECK-NEXT: .LBB0_2: # %sw.bb

llvm/test/CodeGen/Mips/pseudo-jump-fill.ll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ define i32 @test(i32 signext %x, i32 signext %c) {
2020
; CHECK-NEXT: lw $6, %got($JTI0_0)($3)
2121
; CHECK-NEXT: addu16 $5, $5, $6
2222
; CHECK-NEXT: lw $5, %lo($JTI0_0)($5)
23-
; CHECK-NEXT: addu16 $3, $5, $3
23+
; CHECK-NEXT: addu16 $3, $3, $5
2424
; CHECK-NEXT: jr $3
2525
; CHECK-NEXT: nop
2626
; CHECK-NEXT: $BB0_2: # %sw.bb2

llvm/test/CodeGen/PowerPC/absol-jump-table-enabled.ll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,23 +48,23 @@ define zeroext i32 @jumpTableTest(ptr readonly %list) {
4848
; CHECK-LE-LABEL: jumpTableTest:
4949
; CHECK-LE: # %bb.0: # %entry
5050
; CHECK-LE: rldic r[[REG:[0-9]+]], r[[REG]], 3, 29
51-
; CHECK-LE: ldx r[[REG]], r[[REG]], r[[REG1:[0-9]+]]
51+
; CHECK-LE: ldx r[[REG]], r[[REG1:[0-9]+]], r[[REG]]
5252
; CHECK-LE: mtctr r[[REG]]
5353
; CHECK-LE: bctr
5454
; CHECK-LE: blr
5555
;
5656
; CHECK-BE-LABEL: jumpTableTest:
5757
; CHECK-BE: # %bb.0: # %entry
5858
; CHECK-BE: rldic r[[REG:[0-9]+]], r[[REG]], 2, 30
59-
; CHECK-BE: lwax r[[REG]], r[[REG]], r[[REG1:[0-9]+]]
59+
; CHECK-BE: lwax r[[REG]], r[[REG1:[0-9]+]], r[[REG]]
6060
; CHECK-BE: mtctr r[[REG]]
6161
; CHECK-BE: bctr
6262
; CHECK-BE: blr
6363
;
6464
; CHECK-AIX-LABEL: jumpTableTest:
6565
; CHECK-AIX: # %bb.0: # %entry
6666
; CHECK-AIX: rldic r[[REG:[0-9]+]], r[[REG]], 2, 30
67-
; CHECK-AIX: lwax r[[REG]], r[[REG]], r[[REG1:[0-9]+]]
67+
; CHECK-AIX: lwax r[[REG]], r[[REG1:[0-9]+]], r[[REG]]
6868
; CHECK-AIX: mtctr r[[REG]]
6969
; CHECK-AIX: bctr
7070
; CHECK-AIX: blr

llvm/test/CodeGen/PowerPC/aix-lower-jump-table-mir.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ define i32 @jump_table(i32 %a) {
3131
; 32SMALL-MIR-NEXT: {{ $}}
3232
; 32SMALL-MIR-NEXT: renamable $r3 = RLWINM killed renamable $r3, 2, 0, 29
3333
; 32SMALL-MIR-NEXT: renamable $r4 = LWZtoc %jump-table.0, $r2 :: (load (s32) from got)
34-
; 32SMALL-MIR-NEXT: renamable $r3 = LWZX killed renamable $r3, renamable $r4 :: (load (s32) from jump-table)
35-
; 32SMALL-MIR-NEXT: renamable $r3 = ADD4 killed renamable $r3, killed renamable $r4
34+
; 32SMALL-MIR-NEXT: renamable $r3 = LWZX renamable $r4, killed renamable $r3 :: (load (s32) from jump-table)
35+
; 32SMALL-MIR-NEXT: renamable $r3 = ADD4 killed renamable $r4, killed renamable $r3
3636
; 32SMALL-MIR-NEXT: MTCTR killed renamable $r3, implicit-def $ctr
3737
; 32SMALL-MIR-NEXT: BCTR implicit $ctr
3838
; 32SMALL-MIR-NEXT: {{ $}}
@@ -79,8 +79,8 @@ define i32 @jump_table(i32 %a) {
7979
; 32LARGE-MIR-NEXT: renamable $r3 = RLWINM killed renamable $r3, 2, 0, 29
8080
; 32LARGE-MIR-NEXT: renamable $r4 = ADDIStocHA $r2, %jump-table.0
8181
; 32LARGE-MIR-NEXT: renamable $r4 = LWZtocL %jump-table.0, killed renamable $r4, implicit $r2 :: (load (s32) from got)
82-
; 32LARGE-MIR-NEXT: renamable $r3 = LWZX killed renamable $r3, renamable $r4 :: (load (s32) from jump-table)
83-
; 32LARGE-MIR-NEXT: renamable $r3 = ADD4 killed renamable $r3, killed renamable $r4
82+
; 32LARGE-MIR-NEXT: renamable $r3 = LWZX renamable $r4, killed renamable $r3 :: (load (s32) from jump-table)
83+
; 32LARGE-MIR-NEXT: renamable $r3 = ADD4 killed renamable $r4, killed renamable $r3
8484
; 32LARGE-MIR-NEXT: MTCTR killed renamable $r3, implicit-def $ctr
8585
; 32LARGE-MIR-NEXT: BCTR implicit $ctr
8686
; 32LARGE-MIR-NEXT: {{ $}}
@@ -126,8 +126,8 @@ define i32 @jump_table(i32 %a) {
126126
; 64SMALL-MIR-NEXT: {{ $}}
127127
; 64SMALL-MIR-NEXT: renamable $x3 = RLDIC killed renamable $x3, 2, 30
128128
; 64SMALL-MIR-NEXT: renamable $x4 = LDtocJTI %jump-table.0, $x2 :: (load (s64) from got)
129-
; 64SMALL-MIR-NEXT: renamable $x3 = LWAX killed renamable $x3, renamable $x4 :: (load (s32) from jump-table)
130-
; 64SMALL-MIR-NEXT: renamable $x3 = ADD8 killed renamable $x3, killed renamable $x4
129+
; 64SMALL-MIR-NEXT: renamable $x3 = LWAX renamable $x4, killed renamable $x3 :: (load (s32) from jump-table)
130+
; 64SMALL-MIR-NEXT: renamable $x3 = ADD8 killed renamable $x4, killed renamable $x3
131131
; 64SMALL-MIR-NEXT: MTCTR8 killed renamable $x3, implicit-def $ctr8
132132
; 64SMALL-MIR-NEXT: BCTR8 implicit $ctr8
133133
; 64SMALL-MIR-NEXT: {{ $}}
@@ -174,8 +174,8 @@ define i32 @jump_table(i32 %a) {
174174
; 64LARGE-MIR-NEXT: renamable $x3 = RLDIC killed renamable $x3, 2, 30
175175
; 64LARGE-MIR-NEXT: renamable $x4 = ADDIStocHA8 $x2, %jump-table.0
176176
; 64LARGE-MIR-NEXT: renamable $x4 = LDtocL %jump-table.0, killed renamable $x4, implicit $x2 :: (load (s64) from got)
177-
; 64LARGE-MIR-NEXT: renamable $x3 = LWAX killed renamable $x3, renamable $x4 :: (load (s32) from jump-table)
178-
; 64LARGE-MIR-NEXT: renamable $x3 = ADD8 killed renamable $x3, killed renamable $x4
177+
; 64LARGE-MIR-NEXT: renamable $x3 = LWAX renamable $x4, killed renamable $x3 :: (load (s32) from jump-table)
178+
; 64LARGE-MIR-NEXT: renamable $x3 = ADD8 killed renamable $x4, killed renamable $x3
179179
; 64LARGE-MIR-NEXT: MTCTR8 killed renamable $x3, implicit-def $ctr8
180180
; 64LARGE-MIR-NEXT: BCTR8 implicit $ctr8
181181
; 64LARGE-MIR-NEXT: {{ $}}

llvm/test/CodeGen/PowerPC/aix-lower-jump-table.ll

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ sw.epilog:
5151
; 32SMALL-ASM: bgt 0, L..BB0_3
5252
; 32SMALL-ASM: lwz 4, L..C0(2)
5353
; 32SMALL-ASM: slwi 3, 3, 2
54-
; 32SMALL-ASM: lwzx 3, 3, 4
55-
; 32SMALL-ASM: add 3, 3, 4
54+
; 32SMALL-ASM: lwzx 3, 4, 3
55+
; 32SMALL-ASM: add 3, 4, 3
5656
; 32SMALL-ASM: mtctr 3
5757
; 32SMALL-ASM: bctr
5858
; 32SMALL-ASM: L..BB0_2:
@@ -78,8 +78,8 @@ sw.epilog:
7878
; 32LARGE-ASM: addis 4, L..C0@u(2)
7979
; 32LARGE-ASM: slwi 3, 3, 2
8080
; 32LARGE-ASM: lwz 4, L..C0@l(4)
81-
; 32LARGE-ASM: lwzx 3, 3, 4
82-
; 32LARGE-ASM: add 3, 3, 4
81+
; 32LARGE-ASM: lwzx 3, 4, 3
82+
; 32LARGE-ASM: add 3, 4, 3
8383
; 32LARGE-ASM: mtctr 3
8484
; 32LARGE-ASM: bctr
8585
; 32LARGE-ASM: L..BB0_2:
@@ -104,8 +104,8 @@ sw.epilog:
104104
; 64SMALL-ASM: bgt 0, L..BB0_3
105105
; 64SMALL-ASM: ld 4, L..C0(2)
106106
; 64SMALL-ASM: rldic 3, 3, 2, 30
107-
; 64SMALL-ASM: lwax 3, 3, 4
108-
; 64SMALL-ASM: add 3, 3, 4
107+
; 64SMALL-ASM: lwax 3, 4, 3
108+
; 64SMALL-ASM: add 3, 4, 3
109109
; 64SMALL-ASM: mtctr 3
110110
; 64SMALL-ASM: bctr
111111
; 64SMALL-ASM: L..BB0_2:
@@ -131,8 +131,8 @@ sw.epilog:
131131
; 64LARGE-ASM: addis 4, L..C0@u(2)
132132
; 64LARGE-ASM: rldic 3, 3, 2, 30
133133
; 64LARGE-ASM: ld 4, L..C0@l(4)
134-
; 64LARGE-ASM: lwax 3, 3, 4
135-
; 64LARGE-ASM: add 3, 3, 4
134+
; 64LARGE-ASM: lwax 3, 4, 3
135+
; 64LARGE-ASM: add 3, 4, 3
136136
; 64LARGE-ASM: mtctr 3
137137
; 64LARGE-ASM: bctr
138138
; 64LARGE-ASM: L..BB0_2:

llvm/test/CodeGen/PowerPC/jump-tables-collapse-rotate.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ define dso_local zeroext i32 @test(i32 signext %l) nounwind {
1616
; CHECK-NEXT: addis r4, r2, .LC0@toc@ha
1717
; CHECK-NEXT: rldic r3, r3, 2, 30
1818
; CHECK-NEXT: ld r4, .LC0@toc@l(r4)
19-
; CHECK-NEXT: lwax r3, r3, r4
20-
; CHECK-NEXT: add r3, r3, r4
19+
; CHECK-NEXT: lwax r3, r4, r3
20+
; CHECK-NEXT: add r3, r4, r3
2121
; CHECK-NEXT: mtctr r3
2222
; CHECK-NEXT: bctr
2323
; CHECK-NEXT: .LBB0_2: # %sw.bb

llvm/test/CodeGen/PowerPC/mcm-5.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ sw.epilog: ; preds = %sw.bb3, %sw.default
5555

5656
; CHECK: addis [[REG1:[0-9]+]], 2, .LC[[TOCNUM:[0-9]+]]@toc@ha
5757
; CHECK: ld [[REG2:[0-9]+]], .LC[[TOCNUM]]@toc@l([[REG1]])
58-
; CHECK: lwax [[REG3:[0-9]+]], {{[0-9]+}}, [[REG2]]
59-
; CHECK-NEXT: add [[REG4:[0-9]+]], [[REG3]], [[REG2]]
58+
; CHECK: lwax [[REG3:[0-9]+]], [[REG2]], {{[0-9]+}}
59+
; CHECK-NEXT: add [[REG4:[0-9]+]], [[REG2]], [[REG3]]
6060
; CHECK-NEXT: mtctr [[REG4]]
6161
; CHECK-NEXT: bctr
6262

@@ -70,8 +70,8 @@ sw.epilog: ; preds = %sw.bb3, %sw.default
7070

7171
; LARGE: addis [[REG1:[0-9]+]], 2, .LC[[TOCNUM:[0-9]+]]@toc@ha
7272
; LARGE: ld [[REG2:[0-9]+]], .LC[[TOCNUM]]@toc@l([[REG1]])
73-
; LARGE: lwax [[REG3:[0-9]+]], {{[0-9]+}}, [[REG2]]
74-
; LARGE-NEXT: add [[REG4:[0-9]+]], [[REG3]], [[REGBASE]]
73+
; LARGE: lwax [[REG3:[0-9]+]], [[REG2]], {{[0-9]+}}
74+
; LARGE-NEXT: add [[REG4:[0-9]+]], [[REGBASE]], [[REG3]]
7575
; LARGE-NEXT: mtctr [[REG4]]
7676
; LARGE-NEXT: bctr
7777

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
6565
; CHECK-NEXT: lwz r5, 0(r3)
6666
; CHECK-NEXT: rlwinm r4, r5, 0, 21, 22
6767
; CHECK-NEXT: cmpwi cr3, r4, 512
68-
; CHECK-NEXT: lwax r4, r30, r29
69-
; CHECK-NEXT: add r4, r4, r29
68+
; CHECK-NEXT: lwax r4, r29, r30
69+
; CHECK-NEXT: add r4, r29, r4
7070
; CHECK-NEXT: mtctr r4
7171
; CHECK-NEXT: li r4, 0
7272
; CHECK-NEXT: bctr
@@ -258,8 +258,8 @@ define dso_local fastcc void @P10_Spill_CR_GT() unnamed_addr {
258258
; CHECK-BE-NEXT: lwz r5, 0(r3)
259259
; CHECK-BE-NEXT: rlwinm r4, r5, 0, 21, 22
260260
; CHECK-BE-NEXT: cmpwi cr3, r4, 512
261-
; CHECK-BE-NEXT: lwax r4, r30, r29
262-
; CHECK-BE-NEXT: add r4, r4, r29
261+
; CHECK-BE-NEXT: lwax r4, r29, r30
262+
; CHECK-BE-NEXT: add r4, r29, r4
263263
; CHECK-BE-NEXT: mtctr r4
264264
; CHECK-BE-NEXT: li r4, 0
265265
; CHECK-BE-NEXT: bctr

llvm/test/CodeGen/PowerPC/pcrel-jump-table.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ define dso_local signext i32 @jumptable(i32 signext %param) {
2727
; CHECK-R-NEXT: # %bb.1: # %entry
2828
; CHECK-R-NEXT: rldic r4, r4, 2, 30
2929
; CHECK-R-NEXT: paddi r5, 0, .LJTI0_0@PCREL, 1
30-
; CHECK-R-NEXT: lwax r4, r4, r5
31-
; CHECK-R-NEXT: add r4, r4, r5
30+
; CHECK-R-NEXT: lwax r4, r5, r4
31+
; CHECK-R-NEXT: add r4, r5, r4
3232
; CHECK-R-NEXT: mtctr r4
3333
; CHECK-R-NEXT: bctr
3434
; CHECK-R-NEXT: .LBB0_2: # %sw.bb1
@@ -56,7 +56,7 @@ define dso_local signext i32 @jumptable(i32 signext %param) {
5656
; CHECK-A-LE-NEXT: # %bb.1: # %entry
5757
; CHECK-A-LE-NEXT: rldic r4, r4, 3, 29
5858
; CHECK-A-LE-NEXT: paddi r5, 0, .LJTI0_0@PCREL, 1
59-
; CHECK-A-LE-NEXT: ldx r4, r4, r5
59+
; CHECK-A-LE-NEXT: ldx r4, r5, r4
6060
; CHECK-A-LE-NEXT: mtctr r4
6161
; CHECK-A-LE-NEXT: bctr
6262
; CHECK-A-LE-NEXT: .LBB0_2: # %sw.bb1
@@ -84,7 +84,7 @@ define dso_local signext i32 @jumptable(i32 signext %param) {
8484
; CHECK-A-BE-NEXT: # %bb.1: # %entry
8585
; CHECK-A-BE-NEXT: rldic r4, r4, 2, 30
8686
; CHECK-A-BE-NEXT: paddi r5, 0, .LJTI0_0@PCREL, 1
87-
; CHECK-A-BE-NEXT: lwax r4, r4, r5
87+
; CHECK-A-BE-NEXT: lwax r4, r5, r4
8888
; CHECK-A-BE-NEXT: mtctr r4
8989
; CHECK-A-BE-NEXT: bctr
9090
; CHECK-A-BE-NEXT: .LBB0_2: # %sw.bb1

llvm/test/CodeGen/RISCV/jumptable-swguarded.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ define void @above_threshold(i32 signext %in, ptr %out) nounwind {
1616
; CHECK-NEXT: slli a0, a0, 2
1717
; CHECK-NEXT: lui a2, %hi(.LJTI0_0)
1818
; CHECK-NEXT: addi a2, a2, %lo(.LJTI0_0)
19-
; CHECK-NEXT: add a0, a0, a2
19+
; CHECK-NEXT: add a0, a2, a0
2020
; CHECK-NEXT: lw t2, 0(a0)
2121
; CHECK-NEXT: jr t2
2222
; CHECK-NEXT: .LBB0_2: # %bb1
@@ -50,7 +50,7 @@ define void @above_threshold(i32 signext %in, ptr %out) nounwind {
5050
; NO-ZICFILP-NEXT: slli a0, a0, 2
5151
; NO-ZICFILP-NEXT: lui a2, %hi(.LJTI0_0)
5252
; NO-ZICFILP-NEXT: addi a2, a2, %lo(.LJTI0_0)
53-
; NO-ZICFILP-NEXT: add a0, a0, a2
53+
; NO-ZICFILP-NEXT: add a0, a2, a0
5454
; NO-ZICFILP-NEXT: lw a0, 0(a0)
5555
; NO-ZICFILP-NEXT: jr a0
5656
; NO-ZICFILP-NEXT: .LBB0_2: # %bb1

0 commit comments

Comments
 (0)