Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / Assembler / ConstantExprFold.ll
blobb7e4075ea9e1edec65349ccf136bf3c85d80f6d3
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
2 ; This test checks to make sure that constant exprs fold in some simple
3 ; situations
5 ; RUN: opt -S < %s | FileCheck %s
6 ; RUN: llvm-as < %s | llvm-dis | FileCheck %s
7 ; RUN: verify-uselistorder %s
9 @A = global i64 0
11 @add = global ptr inttoptr (i64 add (i64 ptrtoint (ptr @A to i64), i64 0) to ptr) ; X + 0 == X
12 @sub = global ptr inttoptr (i64 sub (i64 ptrtoint (ptr @A to i64), i64 0) to ptr) ; X - 0 == X
13 @mul = global ptr inttoptr (i64 mul (i64 ptrtoint (ptr @A to i64), i64 0) to ptr) ; X * 0 == 0
14 @xor = global ptr inttoptr (i64 xor (i64 ptrtoint (ptr @A to i64), i64 0) to ptr) ; X ^ 0 == X
16 %Ty = type { i32, i32 }
17 @B = external global %Ty
19 ; @icmp_ult1 and @icmp_ult2 will be folded by the target-dependent constant folder instead.
20 @icmp_ult1 = global i1 icmp ult (ptr @A, ptr getelementptr (i64, ptr @A, i64 1))        ; true
21 @icmp_slt = global i1 icmp slt (ptr @A, ptr @A)        ; false
22 @icmp_ult2 = global i1 icmp ult (ptr @B,
23   ptr getelementptr (%Ty, ptr @B, i64 0, i32 1))            ; true
24 ;global i1 icmp ne (ptr @A, ptr @B)                 ; true
26 ; PR2206
27 @cons = weak global i32 0, align 8              ; <ptr> [#uses=1]
29 @gep1 = global <2 x ptr> getelementptr(i8, <2 x ptr> undef, <2 x i64> <i64 1, i64 1>)
30 @gep2 = global <2 x ptr> getelementptr({ i8 }, <2 x ptr> undef, <2 x i64> <i64 1, i64 1>, <2 x i32> <i32 0, i32 0>)
31 @gep3 = global <2 x ptr> getelementptr(i8, <2 x ptr> zeroinitializer, <2 x i64> <i64 0, i64 0>)
32 @gep4 = global <2 x ptr> getelementptr({ i8 }, <2 x ptr> zeroinitializer, <2 x i64> <i64 0, i64 0>, <2 x i32> <i32 0, i32 0>)
35 ; Need a function to make update_test_checks.py work.
37 ; CHECK: @[[A:[a-zA-Z0-9_$"\\.-]+]] = global i64 0
38 ; CHECK: @[[ADD:[a-zA-Z0-9_$"\\.-]+]] = global ptr @A
39 ; CHECK: @[[SUB:[a-zA-Z0-9_$"\\.-]+]] = global ptr @A
40 ; CHECK: @[[MUL:[a-zA-Z0-9_$"\\.-]+]] = global ptr null
41 ; CHECK: @[[XOR:[a-zA-Z0-9_$"\\.-]+]] = global ptr @A
42 ; CHECK: @[[B:[a-zA-Z0-9_$"\\.-]+]] = external global [[TY:%.*]]
43 ; CHECK: @[[ICMP_ULT1:[a-zA-Z0-9_$"\\.-]+]] = global i1 icmp ugt (ptr getelementptr inbounds (i64, ptr @A, i64 1), ptr @A)
44 ; CHECK: @[[ICMP_SLT:[a-zA-Z0-9_$"\\.-]+]] = global i1 false
45 ; CHECK: @[[ICMP_ULT2:[a-zA-Z0-9_$"\\.-]+]] = global i1 icmp ugt (ptr getelementptr inbounds ([[TY:%.*]], ptr @B, i64 0, i32 1), ptr @B)
46 ; CHECK: @[[CONS:[a-zA-Z0-9_$"\\.-]+]] = weak global i32 0, align 8
47 ; CHECK: @[[GEP1:[a-zA-Z0-9_$"\\.-]+]] = global <2 x ptr> undef
48 ; CHECK: @[[GEP2:[a-zA-Z0-9_$"\\.-]+]] = global <2 x ptr> undef
49 ; CHECK: @[[GEP3:[a-zA-Z0-9_$"\\.-]+]] = global <2 x ptr> zeroinitializer
50 ; CHECK: @[[GEP4:[a-zA-Z0-9_$"\\.-]+]] = global <2 x ptr> zeroinitializer
52 define void @dummy() {
53 ; CHECK-LABEL: @dummy(
54 ; CHECK-NEXT:    ret void
56   ret void