Files
clang-p2996/llvm/test/Transforms/NewGVN/assumes.ll
Nikita Popov 353fa4403a [PredicateInfo] Place predicate info after assume
Place the ssa.copy instructions for assumes after the assume,
instead of before it. Both options are valid, but placing them
afterwards prevents assumes from being replaced with assume(true).
This fixes https://bugs.llvm.org/show_bug.cgi?id=37541 in NewGVN
and will avoid a similar issue in SCCP when we handle more
predicate infos.

Differential Revision: https://reviews.llvm.org/D83631
2020-07-13 21:10:11 +02:00

39 lines
1.0 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt < %s -newgvn -S | FileCheck %s
define i32 @test1(i32 %arg) {
; CHECK-LABEL: @test1(
; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ARG:%.*]], 5
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: ret i32 [[ARG]]
;
%cmp = icmp sge i32 %arg, 5
call void @llvm.assume(i1 %cmp)
ret i32 %arg
}
define i32 @test2(i32 %arg, i1 %b) {
; CHECK-LABEL: @test2(
; CHECK-NEXT: br label [[BB:%.*]]
; CHECK: bb:
; CHECK-NEXT: [[A:%.*]] = phi i32 [ 1, [[TMP0:%.*]] ], [ 2, [[BB]] ]
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[ARG:%.*]], [[A]]
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP]])
; CHECK-NEXT: br i1 [[B:%.*]], label [[BB]], label [[END:%.*]]
; CHECK: end:
; CHECK-NEXT: ret i32 [[ARG]]
;
br label %bb
bb:
%a = phi i32 [ 1, %0 ], [ 2, %bb ]
%cmp = icmp eq i32 %arg, %a
call void @llvm.assume(i1 %cmp)
br i1 %b, label %bb, label %end
end:
ret i32 %arg
}
declare void @llvm.assume(i1 %cond)