aboutsummaryrefslogtreecommitdiff
path: root/llvm/test/Transforms/GVN/null-aliases-nothing.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/GVN/null-aliases-nothing.ll')
-rw-r--r--llvm/test/Transforms/GVN/null-aliases-nothing.ll31
1 files changed, 18 insertions, 13 deletions
diff --git a/llvm/test/Transforms/GVN/null-aliases-nothing.ll b/llvm/test/Transforms/GVN/null-aliases-nothing.ll
index dc4ff406..81d44ce 100644
--- a/llvm/test/Transforms/GVN/null-aliases-nothing.ll
+++ b/llvm/test/Transforms/GVN/null-aliases-nothing.ll
@@ -1,19 +1,24 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt < %s -passes=gvn -S | FileCheck %s
%t = type { i32 }
declare void @test1f(ptr)
-define void @test1(ptr noalias %stuff ) {
- %before = load i32, ptr %stuff
-
- call void @test1f(ptr null)
-
- %after = load i32, ptr %stuff ; <--- This should be a dead load
- %sum = add i32 %before, %after
-
- store i32 %sum, ptr %stuff
- ret void
-; CHECK: load
-; CHECK-NOT: load
-; CHECK: ret void
+; `%stuff` is noalias, `test1f` receives only null, cannot clobber `%stuff`,
+; thus the second load is dead.
+define void @test1(ptr noalias %stuff) {
+; CHECK-LABEL: define void @test1(
+; CHECK-SAME: ptr noalias [[STUFF:%.*]]) {
+; CHECK-NEXT: [[BEFORE:%.*]] = load i32, ptr [[STUFF]], align 4
+; CHECK-NEXT: call void @test1f(ptr null)
+; CHECK-NEXT: [[SUM:%.*]] = add i32 [[BEFORE]], [[BEFORE]]
+; CHECK-NEXT: store i32 [[SUM]], ptr [[STUFF]], align 4
+; CHECK-NEXT: ret void
+;
+ %before = load i32, ptr %stuff
+ call void @test1f(ptr null)
+ %after = load i32, ptr %stuff
+ %sum = add i32 %before, %after
+ store i32 %sum, ptr %stuff
+ ret void
}