| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -passes=instcombine -S < %s | FileCheck %s --check-prefix=OPT |
| ; RUN: opt -passes=instcombine -instcombine-max-allocsite-removable-users=1 -S < %s | FileCheck %s --check-prefix=NOOPT |
| |
| ; Test that alloca with few users is still removed by |
| ; isAllocSiteRemovable (not blocked by user-count bailout). |
| ; With a threshold of 1, the alloca is not removed. |
| define i32 @test_few_users_still_removed() { |
| ; OPT-LABEL: @test_few_users_still_removed( |
| ; OPT-NEXT: ret i32 0 |
| ; |
| ; NOOPT-LABEL: @test_few_users_still_removed( |
| ; NOOPT-NEXT: [[A:%.*]] = alloca [4 x i8], align 1 |
| ; NOOPT-NEXT: [[P1:%.*]] = getelementptr inbounds nuw i8, ptr [[A]], i64 1 |
| ; NOOPT-NEXT: [[V0:%.*]] = load i8, ptr [[A]], align 1 |
| ; NOOPT-NEXT: [[V1:%.*]] = load i8, ptr [[P1]], align 1 |
| ; NOOPT-NEXT: [[Z0:%.*]] = zext i8 [[V0]] to i32 |
| ; NOOPT-NEXT: [[Z1:%.*]] = zext i8 [[V1]] to i32 |
| ; NOOPT-NEXT: [[SUM:%.*]] = add nuw nsw i32 [[Z0]], [[Z1]] |
| ; NOOPT-NEXT: ret i32 [[SUM]] |
| ; |
| %a = alloca [4 x i8], align 1 |
| %p0 = getelementptr inbounds [4 x i8], ptr %a, i64 0, i64 0 |
| %p1 = getelementptr inbounds [4 x i8], ptr %a, i64 0, i64 1 |
| %v0 = load i8, ptr %p0, align 1 |
| %v1 = load i8, ptr %p1, align 1 |
| %z0 = zext i8 %v0 to i32 |
| %z1 = zext i8 %v1 to i32 |
| %sum = add i32 %z0, %z1 |
| ret i32 %sum |
| } |