llvm-mirror/test/Transforms/ConstantMerge/2011-01-15-EitherOrder.ll
Rafael Espindola 41852873f7 Don't merge two constants if we care about the address of both.
This fixes the original testcase in PR8927. It also causes a clang
binary built with a patched clang to increase in size by 0.21%.

We can probably get some of the size back by writing a pass that
detects that a global never has its pointer compared and adds
unnamed_addr to it (maybe extend global opt). It is also possible that
there are some other cases clang could add unnamed_addr to.

I will investigate extending globalopt next.

llvm-svn: 123584
2011-01-16 17:05:09 +00:00

19 lines
472 B
LLVM

; RUN: opt -constmerge %s -S -o - | FileCheck %s
; PR8978
declare i32 @zed(%struct.foobar*, %struct.foobar*)
%struct.foobar = type { i32 }
; CHECK: bar.d
@bar.d = unnamed_addr constant %struct.foobar zeroinitializer, align 4
; CHECK-NOT: foo.d
@foo.d = internal constant %struct.foobar zeroinitializer, align 4
define i32 @main() nounwind ssp {
entry:
; CHECK: bar.d
%call2 = tail call i32 @zed(%struct.foobar* @foo.d, %struct.foobar* @bar.d)
nounwind
ret i32 0
}