Files
clang-p2996/llvm/test/Transforms/CorrelatedValuePropagation/conflict.ll
Bjorn Pettersson 8ebb3eac02 [test] Use -passes syntax when specifying pipeline in some more tests
The legacy PM is deprecated, so update a bunch of lit tests running
opt to use the new PM syntax when specifying the pipeline.
In this patch focus has been put on test cases for ConstantMerge,
ConstraintElimination, CorrelatedValuePropagation, GlobalDCE,
GlobalOpt, SCCP, TailCallElim and PredicateInfo.

Differential Revision: https://reviews.llvm.org/D114516
2021-11-27 09:52:55 +01:00

76 lines
1.9 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -passes=correlated-propagation -S < %s | FileCheck %s
; Checks that we don't crash on conflicting facts about a value
; (i.e. unreachable code)
; Test that we can handle conflict edge facts
define i8 @test(i8 %a) {
; CHECK-LABEL: @test(
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], 5
; CHECK-NEXT: br i1 [[CMP1]], label [[NEXT:%.*]], label [[EXIT:%.*]]
; CHECK: next:
; CHECK-NEXT: br i1 false, label [[DEAD:%.*]], label [[EXIT]]
; CHECK: dead:
; CHECK-NEXT: ret i8 5
; CHECK: exit:
; CHECK-NEXT: ret i8 0
;
%cmp1 = icmp eq i8 %a, 5
br i1 %cmp1, label %next, label %exit
next:
%cmp2 = icmp eq i8 %a, 3
br i1 %cmp2, label %dead, label %exit
dead:
; NOTE: undef, or 3 would be equal valid
ret i8 %a
exit:
ret i8 0
}
declare void @llvm.assume(i1)
; Test that we can handle conflicting assume vs edge facts
define i8 @test2(i8 %a) {
; CHECK-LABEL: @test2(
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], 5
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP1]])
; CHECK-NEXT: br i1 false, label [[DEAD:%.*]], label [[EXIT:%.*]]
; CHECK: dead:
; CHECK-NEXT: ret i8 5
; CHECK: exit:
; CHECK-NEXT: ret i8 0
;
%cmp1 = icmp eq i8 %a, 5
call void @llvm.assume(i1 %cmp1)
%cmp2 = icmp eq i8 %a, 3
br i1 %cmp2, label %dead, label %exit
dead:
ret i8 %a
exit:
ret i8 0
}
define i8 @test3(i8 %a) {
; CHECK-LABEL: @test3(
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i8 [[A:%.*]], 5
; CHECK-NEXT: br i1 [[CMP1]], label [[DEAD:%.*]], label [[EXIT:%.*]]
; CHECK: dead:
; CHECK-NEXT: call void @llvm.assume(i1 false)
; CHECK-NEXT: ret i8 5
; CHECK: exit:
; CHECK-NEXT: ret i8 0
;
%cmp1 = icmp eq i8 %a, 5
br i1 %cmp1, label %dead, label %exit
dead:
%cmp2 = icmp eq i8 %a, 3
call void @llvm.assume(i1 %cmp2)
ret i8 %a
exit:
ret i8 0
}