Skip to content

Commit 5313d2e

Browse files
authored
[CodeGen] Fix lower constant intrinsics for dead code (#102442)
lowerConstantIntrinsics does an RPO traveral, which doesn't reach dead blocks. Remove the assertion that all intrinsics are lowered, because some intrinsics might remain.
1 parent 5ea9dd8 commit 5313d2e

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

llvm/lib/CodeGen/PreISelIntrinsicLowering.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,8 +349,8 @@ bool PreISelIntrinsicLowering::lowerIntrinsics(Module &M) const {
349349
Changed |= forEachCall(F, [&](CallInst *CI) {
350350
Function *Parent = CI->getParent()->getParent();
351351
TargetLibraryInfo &TLI = LookupTLI(*Parent);
352+
// Intrinsics in unreachable code are not lowered.
352353
bool Changed = lowerConstantIntrinsics(*Parent, TLI, /*DT=*/nullptr);
353-
assert(Changed && "lowerConstantIntrinsics did not lower intrinsic");
354354
return Changed;
355355
});
356356
break;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -S < %s -passes=pre-isel-intrinsic-lowering | FileCheck %s
3+
4+
define void @test_dead() {
5+
; CHECK-LABEL: define void @test_dead() {
6+
; CHECK-NEXT: ret void
7+
; CHECK: [[DEAD:.*]]:
8+
; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.objectsize.i32.p21(ptr addrspace(21) null, i1 false, i1 false, i1 false)
9+
; CHECK-NEXT: br label %[[DEAD]]
10+
;
11+
ret void
12+
13+
dead:
14+
%x = call i32 @llvm.objectsize.i32.p21(ptr addrspace(21) null, i1 false, i1 false, i1 false)
15+
br label %dead
16+
}
17+
18+
define i32 @test_two() {
19+
; CHECK-LABEL: define i32 @test_two() {
20+
; CHECK-NEXT: ret i32 -1
21+
; CHECK: [[DEAD:.*]]:
22+
; CHECK-NEXT: [[X:%.*]] = call i32 @llvm.objectsize.i32.p21(ptr addrspace(21) null, i1 false, i1 false, i1 false)
23+
; CHECK-NEXT: br label %[[DEAD]]
24+
;
25+
%a = call i32 @llvm.objectsize.i32.p21(ptr addrspace(21) null, i1 false, i1 false, i1 false)
26+
ret i32 %a
27+
28+
dead:
29+
%x = call i32 @llvm.objectsize.i32.p21(ptr addrspace(21) null, i1 false, i1 false, i1 false)
30+
br label %dead
31+
}

0 commit comments

Comments
 (0)