Add another test for the GlobalOpt change in r212079.
authorBob Wilson <bob.wilson@apple.com>
Wed, 2 Mar 2016 20:02:25 +0000 (20:02 +0000)
committerBob Wilson <bob.wilson@apple.com>
Wed, 2 Mar 2016 20:02:25 +0000 (20:02 +0000)
This is a test that Akira Hatanaka wrote to test GlobalOpt's handling of
aliases with GEP operands. David Majnemer independently made the same
change to GlobalOpt in r212079. Akira's test is a useful addition, so I'm
pulling it over from the llvm repo for Swift on GitHub.

llvm-svn: 262510

llvm/test/Transforms/GlobalOpt/alias-used.ll

index 9ced397..02136a0 100644 (file)
@@ -45,3 +45,22 @@ define i8* @g2() {
 define i8* @h() {
   ret i8* @ca
 }
+
+; Check that GlobalOpt doesn't try to resolve aliases with GEP operands.
+
+%struct.S = type { i32, i32, i32 }
+@s = global %struct.S { i32 1, i32 2, i32 3 }, align 4
+
+@alias1 = alias i32, i32* getelementptr inbounds (%struct.S, %struct.S* @s, i64 0, i32 1)
+@alias2 = alias i32, i32* getelementptr inbounds (%struct.S, %struct.S* @s, i64 0, i32 2)
+
+; CHECK: load i32, i32* @alias1, align 4
+; CHECK: load i32, i32* @alias2, align 4
+
+define i32 @foo1() {
+entry:
+  %0 = load i32, i32* @alias1, align 4
+  %1 = load i32, i32* @alias2, align 4
+  %add = add nsw i32 %1, %0
+  ret i32 %add
+}