From 9ab86aabbafe424de527bb5ddd07d2cdbd71c9cf Mon Sep 17 00:00:00 2001 From: Bob Wilson Date: Wed, 2 Mar 2016 20:02:25 +0000 Subject: [PATCH] Add another test for the GlobalOpt change in r212079. 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 | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/llvm/test/Transforms/GlobalOpt/alias-used.ll b/llvm/test/Transforms/GlobalOpt/alias-used.ll index 9ced3974ee87..02136a064471 100644 --- a/llvm/test/Transforms/GlobalOpt/alias-used.ll +++ b/llvm/test/Transforms/GlobalOpt/alias-used.ll @@ -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 +}