xref: /llvm-project/llvm/test/Transforms/DeadStoreElimination/assume.ll (revision fd95f398c7623ff4a62e5001b4cde21c5b9eb111)
11342b861SArthur Eubanks; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
21342b861SArthur Eubanks; RUN: opt -passes=dse -S < %s | FileCheck %s
31342b861SArthur Eubanks
41342b861SArthur Eubanks@global = external constant i8
51342b861SArthur Eubanks
61342b861SArthur Eubanksdefine void @f() {
71342b861SArthur Eubanks; CHECK-LABEL: @f(
8c603cefbSNikita Popov; CHECK-NEXT:    [[TMP1:%.*]] = call noalias ptr @_Znwm(i64 32)
9c603cefbSNikita Popov; CHECK-NEXT:    [[TMP2:%.*]] = icmp ugt ptr [[TMP1]], @global
101342b861SArthur Eubanks; CHECK-NEXT:    call void @llvm.assume(i1 [[TMP2]])
11*fd95f398SFlorian Hahn; CHECK-NEXT:    store i8 0, ptr [[TMP1]], align 1
121342b861SArthur Eubanks; CHECK-NEXT:    ret void
131342b861SArthur Eubanks;
14c603cefbSNikita Popov  %tmp1 = call noalias ptr @_Znwm(i64 32)
15c603cefbSNikita Popov  %tmp2 = icmp ugt ptr %tmp1, @global
161342b861SArthur Eubanks  call void @llvm.assume(i1 %tmp2)
17c603cefbSNikita Popov  store i8 0, ptr %tmp1, align 1
181342b861SArthur Eubanks  ret void
191342b861SArthur Eubanks}
201342b861SArthur Eubanks
2147130384SArthur Eubanksdefine void @f2() {
2247130384SArthur Eubanks; CHECK-LABEL: @f2(
23c603cefbSNikita Popov; CHECK-NEXT:    [[TMP1:%.*]] = call noalias ptr @_Znwm(i64 32)
24c603cefbSNikita Popov; CHECK-NEXT:    [[TMP2:%.*]] = icmp ugt ptr [[TMP1]], @global
2547130384SArthur Eubanks; CHECK-NEXT:    call void @llvm.assume(i1 [[TMP2]])
26*fd95f398SFlorian Hahn; CHECK-NEXT:    store i8 0, ptr [[TMP1]], align 1
27c603cefbSNikita Popov; CHECK-NEXT:    call void @quux(ptr @global)
2847130384SArthur Eubanks; CHECK-NEXT:    ret void
2947130384SArthur Eubanks;
30c603cefbSNikita Popov  %tmp1 = call noalias ptr @_Znwm(i64 32)
31c603cefbSNikita Popov  %tmp2 = icmp ugt ptr %tmp1, @global
3247130384SArthur Eubanks  call void @llvm.assume(i1 %tmp2)
33c603cefbSNikita Popov  store i8 0, ptr %tmp1, align 1
34c603cefbSNikita Popov  call void @quux(ptr @global)
3547130384SArthur Eubanks  ret void
3647130384SArthur Eubanks}
3747130384SArthur Eubanks
38deb5bd12SNikita Popov; FIXME: This is a miscompile
39deb5bd12SNikita Popovdefine void @pr70547() {
40deb5bd12SNikita Popov; CHECK-LABEL: @pr70547(
41deb5bd12SNikita Popov; CHECK-NEXT:    [[A:%.*]] = alloca i8, align 1
42*fd95f398SFlorian Hahn; CHECK-NEXT:    store i8 0, ptr [[A]], align 1
43deb5bd12SNikita Popov; CHECK-NEXT:    [[CALL:%.*]] = call ptr @quux(ptr [[A]]) #[[ATTR1:[0-9]+]]
44deb5bd12SNikita Popov; CHECK-NEXT:    [[V:%.*]] = load i8, ptr [[CALL]], align 1
45deb5bd12SNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i8 [[V]], 1
46deb5bd12SNikita Popov; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])
47deb5bd12SNikita Popov; CHECK-NEXT:    ret void
48deb5bd12SNikita Popov;
49deb5bd12SNikita Popov  %a = alloca i8
50deb5bd12SNikita Popov  store i8 0, ptr %a
51deb5bd12SNikita Popov  %call = call ptr @quux(ptr %a) memory(none) nounwind willreturn
52deb5bd12SNikita Popov  %v = load i8, ptr %call
53deb5bd12SNikita Popov  %cmp = icmp ne i8 %v, 1
54deb5bd12SNikita Popov  call void @llvm.assume(i1 %cmp)
55deb5bd12SNikita Popov  ret void
56deb5bd12SNikita Popov}
57deb5bd12SNikita Popov
58c603cefbSNikita Popovdeclare ptr @_Znwm(i64)
591342b861SArthur Eubanks
601342b861SArthur Eubanksdeclare void @llvm.assume(i1)
6147130384SArthur Eubanks
62c603cefbSNikita Popovdeclare void @quux(ptr)
63