xref: /llvm-project/llvm/test/Transforms/GVN/assume.ll (revision e7618a6361f856a089d6f9eb476f18a9bf4643b8)
159855b9dSNikita Popov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*e7618a63SNikita Popov; RUN: opt < %s -passes=gvn -verify-analysis-invalidation -S | FileCheck %s
359855b9dSNikita Popov
459855b9dSNikita Popovdeclare void @llvm.assume(i1)
559855b9dSNikita Popovdeclare void @use(i1)
659855b9dSNikita Popov
7*e7618a63SNikita Popovdefine void @assume_true() {
8*e7618a63SNikita Popov; CHECK-LABEL: @assume_true(
9*e7618a63SNikita Popov; CHECK-NEXT:    ret void
10*e7618a63SNikita Popov;
11*e7618a63SNikita Popov  call void @llvm.assume(i1 true)
12*e7618a63SNikita Popov  ret void
13*e7618a63SNikita Popov}
14*e7618a63SNikita Popov
15*e7618a63SNikita Popovdefine void @assume_false() {
16*e7618a63SNikita Popov; CHECK-LABEL: @assume_false(
17*e7618a63SNikita Popov; CHECK-NEXT:    store i8 poison, ptr null, align 1
18*e7618a63SNikita Popov; CHECK-NEXT:    ret void
19*e7618a63SNikita Popov;
20*e7618a63SNikita Popov  call void @llvm.assume(i1 false)
21*e7618a63SNikita Popov  ret void
22*e7618a63SNikita Popov}
23*e7618a63SNikita Popov
2459855b9dSNikita Popovdefine void @assume_arg(i1 %x) {
2559855b9dSNikita Popov; CHECK-LABEL: @assume_arg(
2659855b9dSNikita Popov; CHECK-NEXT:    call void @llvm.assume(i1 [[X:%.*]])
2759855b9dSNikita Popov; CHECK-NEXT:    call void @use(i1 true)
2859855b9dSNikita Popov; CHECK-NEXT:    ret void
2959855b9dSNikita Popov;
3059855b9dSNikita Popov  call void @llvm.assume(i1 %x)
3159855b9dSNikita Popov  call void @use(i1 %x)
3259855b9dSNikita Popov  ret void
3359855b9dSNikita Popov}
3459855b9dSNikita Popov
3559855b9dSNikita Popovdefine void @assume_not_arg(i1 %x) {
3659855b9dSNikita Popov; CHECK-LABEL: @assume_not_arg(
3759855b9dSNikita Popov; CHECK-NEXT:    [[XOR:%.*]] = xor i1 [[X:%.*]], true
3859855b9dSNikita Popov; CHECK-NEXT:    call void @llvm.assume(i1 [[XOR]])
3991ce8e12SNikita Popov; CHECK-NEXT:    call void @use(i1 false)
4059855b9dSNikita Popov; CHECK-NEXT:    ret void
4159855b9dSNikita Popov;
4259855b9dSNikita Popov  %xor = xor i1 %x, true
4359855b9dSNikita Popov  call void @llvm.assume(i1 %xor)
4459855b9dSNikita Popov  call void @use(i1 %x)
4559855b9dSNikita Popov  ret void
4659855b9dSNikita Popov}
4759855b9dSNikita Popov
4859855b9dSNikita Popovdefine void @pr47496(i8 %x) {
4959855b9dSNikita Popov; CHECK-LABEL: @pr47496(
5059855b9dSNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[X:%.*]], 0
5159855b9dSNikita Popov; CHECK-NEXT:    [[XOR:%.*]] = xor i1 [[CMP]], true
5259855b9dSNikita Popov; CHECK-NEXT:    call void @llvm.assume(i1 [[XOR]])
5391ce8e12SNikita Popov; CHECK-NEXT:    call void @use(i1 false)
5459855b9dSNikita Popov; CHECK-NEXT:    ret void
5559855b9dSNikita Popov;
5659855b9dSNikita Popov  %cmp = icmp slt i8 %x, 0
5759855b9dSNikita Popov  %xor = xor i1 %cmp, true
5859855b9dSNikita Popov  call void @llvm.assume(i1 %xor)
5959855b9dSNikita Popov  call void @use(i1 %cmp)
6059855b9dSNikita Popov  ret void
6159855b9dSNikita Popov}
62