Files
clang-p2996/llvm/test/Transforms/SCCP/conditions-iter-order.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

80 lines
2.6 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -passes=ipsccp -S %s | FileCheck %s
declare noalias i8* @malloc(i64)
; Make sure we can eliminate `%tmp17 = icmp ult i32 %tmp10, 3`.
declare void @use(i1)
define internal i32* @spam(i32* %arg) {
; CHECK-LABEL: @spam(
; CHECK-NEXT: bb:
; CHECK-NEXT: [[TMP:%.*]] = call i8* @malloc(i64 10368)
; CHECK-NEXT: [[TMP1:%.*]] = bitcast i8* [[TMP]] to i32*
; CHECK-NEXT: [[TMP4:%.*]] = getelementptr inbounds i32, i32* [[ARG:%.*]], i32 0
; CHECK-NEXT: [[TMP5:%.*]] = load i32, i32* [[TMP4]], align 8
; CHECK-NEXT: [[TMP6:%.*]] = add i32 [[TMP5]], 1
; CHECK-NEXT: [[TMP7:%.*]] = getelementptr inbounds i32, i32* [[ARG]], i32 1
; CHECK-NEXT: [[TMP10:%.*]] = icmp ne i32* [[TMP7]], null
; CHECK-NEXT: br i1 [[TMP10]], label [[BB17:%.*]], label [[BB13:%.*]]
; CHECK: bb13:
; CHECK-NEXT: [[TMP14:%.*]] = getelementptr inbounds i32, i32* [[ARG]], i32 2
; CHECK-NEXT: [[TMP15:%.*]] = load i32, i32* [[TMP14]], align 8
; CHECK-NEXT: [[TMP16:%.*]] = add i32 [[TMP15]], 1
; CHECK-NEXT: br label [[BB30:%.*]]
; CHECK: bb17:
; CHECK-NEXT: [[TMP18:%.*]] = icmp eq i32 [[TMP6]], [[TMP5]]
; CHECK-NEXT: [[TMP19:%.*]] = getelementptr inbounds i32, i32* [[ARG]], i32 3
; CHECK-NEXT: [[TMP20:%.*]] = load i32, i32* [[TMP19]], align 8
; CHECK-NEXT: br i1 [[TMP18]], label [[BB30]], label [[BB13]]
; CHECK: bb30:
; CHECK-NEXT: ret i32* [[TMP1]]
;
bb:
%tmp = call i8* @malloc(i64 10368)
%tmp1 = bitcast i8* %tmp to i32*
%tmp4 = getelementptr inbounds i32, i32* %arg, i32 0
%tmp5 = load i32, i32* %tmp4, align 8
%tmp6 = add i32 %tmp5, 1
%tmp7 = getelementptr inbounds i32, i32* %arg, i32 1
%tmp10 = icmp ne i32* %tmp7, null
br i1 %tmp10, label %bb17, label %bb13
bb13:
%tmp14 = getelementptr inbounds i32, i32* %arg, i32 2
%tmp15 = load i32, i32* %tmp14, align 8
%tmp16 = add i32 %tmp15, 1
br label %bb30
bb17:
%tmp18 = icmp eq i32 %tmp6, %tmp5
%tmp19 = getelementptr inbounds i32, i32* %arg, i32 3
%tmp20 = load i32, i32* %tmp19, align 8
br i1 %tmp18, label %bb30, label %bb13
bb30:
ret i32* %tmp1
}
define void @spam.1(i32* %arg) {
bb:
%tmp = alloca i8*, align 8
%tmp4 = call i32* @spam(i32* %arg)
br label %bb6
bb6: ; preds = %bb5
%tmp7 = getelementptr inbounds i32, i32* %tmp4, i32 1
%tmp10 = load i32, i32* %tmp7, align 8
%tmp11 = icmp ne i32 %tmp10, 0
br i1 %tmp11, label %bb6, label %bb15
bb15: ; preds = %bb12
%tmp17 = icmp ult i32 %tmp10, 3
call void @use(i1 %tmp17)
br i1 %tmp17, label %bb6, label %bb24
bb24:
ret void
}