Skip to content

Commit 5ce067d

Browse files
committed
Revert "[LSR][TTI][RISCV] Disable terminator folding for RISC-V."
This reverts commit fdb8764, and thus re-enables terminator folding for RISCV. The reported miscompile has been fixed in f5dd70c.
1 parent bdfe5d6 commit 5ce067d

9 files changed

+713
-725
lines changed

llvm/lib/Target/RISCV/RISCVTargetTransformInfo.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,8 +362,7 @@ class RISCVTTIImpl : public BasicTTIImplBase<RISCVTTIImpl> {
362362
const TargetTransformInfo::LSRCost &C2);
363363

364364
bool shouldFoldTerminatingConditionAfterLSR() const {
365-
// FIXME: Enabling this causes miscompiles.
366-
return false;
365+
return true;
367366
}
368367
};
369368

llvm/test/CodeGen/RISCV/branch-on-zero.ll

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -120,36 +120,45 @@ define i32 @test_lshr2(ptr nocapture %x, ptr nocapture readonly %y, i32 %n) {
120120
; RV32-LABEL: test_lshr2:
121121
; RV32: # %bb.0: # %entry
122122
; RV32-NEXT: srli a2, a2, 2
123-
; RV32-NEXT: beqz a2, .LBB3_2
124-
; RV32-NEXT: .LBB3_1: # %while.body
123+
; RV32-NEXT: beqz a2, .LBB3_3
124+
; RV32-NEXT: # %bb.1: # %while.body.preheader
125+
; RV32-NEXT: slli a2, a2, 2
126+
; RV32-NEXT: add a2, a1, a2
127+
; RV32-NEXT: .LBB3_2: # %while.body
125128
; RV32-NEXT: # =>This Inner Loop Header: Depth=1
126129
; RV32-NEXT: lw a3, 0(a1)
127-
; RV32-NEXT: addi a1, a1, 4
130+
; RV32-NEXT: addi a4, a1, 4
128131
; RV32-NEXT: slli a3, a3, 1
129-
; RV32-NEXT: addi a4, a0, 4
130-
; RV32-NEXT: addi a2, a2, -1
132+
; RV32-NEXT: addi a1, a0, 4
131133
; RV32-NEXT: sw a3, 0(a0)
132-
; RV32-NEXT: mv a0, a4
133-
; RV32-NEXT: bnez a2, .LBB3_1
134-
; RV32-NEXT: .LBB3_2: # %while.end
134+
; RV32-NEXT: mv a0, a1
135+
; RV32-NEXT: mv a1, a4
136+
; RV32-NEXT: bne a4, a2, .LBB3_2
137+
; RV32-NEXT: .LBB3_3: # %while.end
135138
; RV32-NEXT: li a0, 0
136139
; RV32-NEXT: ret
137140
;
138141
; RV64-LABEL: test_lshr2:
139142
; RV64: # %bb.0: # %entry
140143
; RV64-NEXT: srliw a2, a2, 2
141-
; RV64-NEXT: beqz a2, .LBB3_2
142-
; RV64-NEXT: .LBB3_1: # %while.body
144+
; RV64-NEXT: beqz a2, .LBB3_3
145+
; RV64-NEXT: # %bb.1: # %while.body.preheader
146+
; RV64-NEXT: addi a2, a2, -1
147+
; RV64-NEXT: slli a2, a2, 32
148+
; RV64-NEXT: srli a2, a2, 30
149+
; RV64-NEXT: add a2, a2, a1
150+
; RV64-NEXT: addi a2, a2, 4
151+
; RV64-NEXT: .LBB3_2: # %while.body
143152
; RV64-NEXT: # =>This Inner Loop Header: Depth=1
144153
; RV64-NEXT: lw a3, 0(a1)
145-
; RV64-NEXT: addi a1, a1, 4
154+
; RV64-NEXT: addi a4, a1, 4
146155
; RV64-NEXT: slli a3, a3, 1
147-
; RV64-NEXT: addi a4, a0, 4
148-
; RV64-NEXT: addiw a2, a2, -1
156+
; RV64-NEXT: addi a1, a0, 4
149157
; RV64-NEXT: sw a3, 0(a0)
150-
; RV64-NEXT: mv a0, a4
151-
; RV64-NEXT: bnez a2, .LBB3_1
152-
; RV64-NEXT: .LBB3_2: # %while.end
158+
; RV64-NEXT: mv a0, a1
159+
; RV64-NEXT: mv a1, a4
160+
; RV64-NEXT: bne a4, a2, .LBB3_2
161+
; RV64-NEXT: .LBB3_3: # %while.end
153162
; RV64-NEXT: li a0, 0
154163
; RV64-NEXT: ret
155164
entry:

llvm/test/CodeGen/RISCV/riscv-codegenprepare-asm.ll

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@
88
define void @test1(ptr nocapture noundef %a, i32 noundef signext %n) {
99
; CHECK-LABEL: test1:
1010
; CHECK: # %bb.0: # %entry
11-
; CHECK-NEXT: blez a1, .LBB0_2
12-
; CHECK-NEXT: .LBB0_1: # %for.body
11+
; CHECK-NEXT: blez a1, .LBB0_3
12+
; CHECK-NEXT: # %bb.1: # %for.body.preheader
13+
; CHECK-NEXT: slli a1, a1, 2
14+
; CHECK-NEXT: add a1, a0, a1
15+
; CHECK-NEXT: .LBB0_2: # %for.body
1316
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
1417
; CHECK-NEXT: lw a2, 0(a0)
1518
; CHECK-NEXT: addi a2, a2, 4
1619
; CHECK-NEXT: sw a2, 0(a0)
17-
; CHECK-NEXT: addi a1, a1, -1
1820
; CHECK-NEXT: addi a0, a0, 4
19-
; CHECK-NEXT: bnez a1, .LBB0_1
20-
; CHECK-NEXT: .LBB0_2: # %for.cond.cleanup
21+
; CHECK-NEXT: bne a0, a1, .LBB0_2
22+
; CHECK-NEXT: .LBB0_3: # %for.cond.cleanup
2123
; CHECK-NEXT: ret
2224
entry:
2325
%cmp3 = icmp sgt i32 %n, 0

llvm/test/CodeGen/RISCV/rvv/fixed-vectors-fp-buildvec.ll

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -206,33 +206,19 @@ define <8 x float> @splat_idx_v8f32(<8 x float> %v, i64 %idx) {
206206

207207
; Test that we pull the vlse of the constant pool out of the loop.
208208
define dso_local void @splat_load_licm(float* %0) {
209-
; RV32-LABEL: splat_load_licm:
210-
; RV32: # %bb.0:
211-
; RV32-NEXT: li a1, 1024
212-
; RV32-NEXT: lui a2, 263168
213-
; RV32-NEXT: vsetivli zero, 4, e32, m1, ta, ma
214-
; RV32-NEXT: vmv.v.x v8, a2
215-
; RV32-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=1
216-
; RV32-NEXT: vse32.v v8, (a0)
217-
; RV32-NEXT: addi a1, a1, -4
218-
; RV32-NEXT: addi a0, a0, 16
219-
; RV32-NEXT: bnez a1, .LBB12_1
220-
; RV32-NEXT: # %bb.2:
221-
; RV32-NEXT: ret
222-
;
223-
; RV64-LABEL: splat_load_licm:
224-
; RV64: # %bb.0:
225-
; RV64-NEXT: li a1, 1024
226-
; RV64-NEXT: lui a2, 263168
227-
; RV64-NEXT: vsetivli zero, 4, e32, m1, ta, ma
228-
; RV64-NEXT: vmv.v.x v8, a2
229-
; RV64-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=1
230-
; RV64-NEXT: vse32.v v8, (a0)
231-
; RV64-NEXT: addiw a1, a1, -4
232-
; RV64-NEXT: addi a0, a0, 16
233-
; RV64-NEXT: bnez a1, .LBB12_1
234-
; RV64-NEXT: # %bb.2:
235-
; RV64-NEXT: ret
209+
; CHECK-LABEL: splat_load_licm:
210+
; CHECK: # %bb.0:
211+
; CHECK-NEXT: lui a1, 1
212+
; CHECK-NEXT: add a1, a0, a1
213+
; CHECK-NEXT: lui a2, 263168
214+
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
215+
; CHECK-NEXT: vmv.v.x v8, a2
216+
; CHECK-NEXT: .LBB12_1: # =>This Inner Loop Header: Depth=1
217+
; CHECK-NEXT: vse32.v v8, (a0)
218+
; CHECK-NEXT: addi a0, a0, 16
219+
; CHECK-NEXT: bne a0, a1, .LBB12_1
220+
; CHECK-NEXT: # %bb.2:
221+
; CHECK-NEXT: ret
236222
br label %2
237223

238224
2: ; preds = %2, %1
@@ -1408,3 +1394,6 @@ define <2 x double> @vid_step2_v2f64() {
14081394
; CHECK-NEXT: ret
14091395
ret <2 x double> <double 0.0, double 2.0>
14101396
}
1397+
;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
1398+
; RV32: {{.*}}
1399+
; RV64: {{.*}}

0 commit comments

Comments
 (0)