[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / Transforms / CorrelatedValuePropagation / conflict.ll
blob7bba0565d9988aa5b9e3dc89341edfc6eb4ed022
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes=correlated-propagation -S < %s | FileCheck %s
4 ; Checks that we don't crash on conflicting facts about a value
5 ; (i.e. unreachable code)
7 ; Test that we can handle conflict edge facts
9 define i8 @test(i8 %a) {
10 ; CHECK-LABEL: @test(
11 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], 5
12 ; CHECK-NEXT:    br i1 [[CMP1]], label [[NEXT:%.*]], label [[EXIT:%.*]]
13 ; CHECK:       next:
14 ; CHECK-NEXT:    br i1 false, label [[DEAD:%.*]], label [[EXIT]]
15 ; CHECK:       dead:
16 ; CHECK-NEXT:    ret i8 5
17 ; CHECK:       exit:
18 ; CHECK-NEXT:    ret i8 0
20   %cmp1 = icmp eq i8 %a, 5
21   br i1 %cmp1, label %next, label %exit
22 next:
23   %cmp2 = icmp eq i8 %a, 3
24   br i1 %cmp2, label %dead, label %exit
25 dead:
26 ; NOTE: undef, or 3 would be equal valid
27   ret i8 %a
28 exit:
29   ret i8 0
32 declare void @llvm.assume(i1)
34 ; Test that we can handle conflicting assume vs edge facts
36 define i8 @test2(i8 %a) {
37 ; CHECK-LABEL: @test2(
38 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], 5
39 ; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP1]])
40 ; CHECK-NEXT:    br i1 false, label [[DEAD:%.*]], label [[EXIT:%.*]]
41 ; CHECK:       dead:
42 ; CHECK-NEXT:    ret i8 5
43 ; CHECK:       exit:
44 ; CHECK-NEXT:    ret i8 0
46   %cmp1 = icmp eq i8 %a, 5
47   call void @llvm.assume(i1 %cmp1)
48   %cmp2 = icmp eq i8 %a, 3
49   br i1 %cmp2, label %dead, label %exit
50 dead:
51   ret i8 %a
52 exit:
53   ret i8 0
56 define i8 @test3(i8 %a) {
57 ; CHECK-LABEL: @test3(
58 ; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], 5
59 ; CHECK-NEXT:    br i1 [[CMP1]], label [[DEAD:%.*]], label [[EXIT:%.*]]
60 ; CHECK:       dead:
61 ; CHECK-NEXT:    call void @llvm.assume(i1 false)
62 ; CHECK-NEXT:    ret i8 5
63 ; CHECK:       exit:
64 ; CHECK-NEXT:    ret i8 0
66   %cmp1 = icmp eq i8 %a, 5
67   br i1 %cmp1, label %dead, label %exit
68 dead:
69   %cmp2 = icmp eq i8 %a, 3
70   call void @llvm.assume(i1 %cmp2)
71   ret i8 %a
72 exit:
73   ret i8 0