xref: /llvm-project/llvm/test/Transforms/GVN/assume.ll (revision e7618a6361f856a089d6f9eb476f18a9bf4643b8)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=gvn -verify-analysis-invalidation -S | FileCheck %s
3
4declare void @llvm.assume(i1)
5declare void @use(i1)
6
7define void @assume_true() {
8; CHECK-LABEL: @assume_true(
9; CHECK-NEXT:    ret void
10;
11  call void @llvm.assume(i1 true)
12  ret void
13}
14
15define void @assume_false() {
16; CHECK-LABEL: @assume_false(
17; CHECK-NEXT:    store i8 poison, ptr null, align 1
18; CHECK-NEXT:    ret void
19;
20  call void @llvm.assume(i1 false)
21  ret void
22}
23
24define void @assume_arg(i1 %x) {
25; CHECK-LABEL: @assume_arg(
26; CHECK-NEXT:    call void @llvm.assume(i1 [[X:%.*]])
27; CHECK-NEXT:    call void @use(i1 true)
28; CHECK-NEXT:    ret void
29;
30  call void @llvm.assume(i1 %x)
31  call void @use(i1 %x)
32  ret void
33}
34
35define void @assume_not_arg(i1 %x) {
36; CHECK-LABEL: @assume_not_arg(
37; CHECK-NEXT:    [[XOR:%.*]] = xor i1 [[X:%.*]], true
38; CHECK-NEXT:    call void @llvm.assume(i1 [[XOR]])
39; CHECK-NEXT:    call void @use(i1 false)
40; CHECK-NEXT:    ret void
41;
42  %xor = xor i1 %x, true
43  call void @llvm.assume(i1 %xor)
44  call void @use(i1 %x)
45  ret void
46}
47
48define void @pr47496(i8 %x) {
49; CHECK-LABEL: @pr47496(
50; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[X:%.*]], 0
51; CHECK-NEXT:    [[XOR:%.*]] = xor i1 [[CMP]], true
52; CHECK-NEXT:    call void @llvm.assume(i1 [[XOR]])
53; CHECK-NEXT:    call void @use(i1 false)
54; CHECK-NEXT:    ret void
55;
56  %cmp = icmp slt i8 %x, 0
57  %xor = xor i1 %cmp, true
58  call void @llvm.assume(i1 %xor)
59  call void @use(i1 %cmp)
60  ret void
61}
62