Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/Transforms/IndVarSimplify/range-iter-threshold.ll
; RUN: opt -passes=indvars -S %s | FileCheck --check-prefix=COMMON --check-prefix=DEFAULT %s | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 | ||||
; RUN: opt -passes=indvars -scev-range-iter-threshold=1 -S %s | FileCheck --check-prefix=COMMON --check-prefix=LIMIT %s | ; RUN: opt -passes=indvars -S %s | FileCheck --check-prefix=COMMON %s | ||||
; RUN: opt -passes=indvars -scev-range-iter-threshold=1 -S %s | FileCheck --check-prefix=COMMON %s | |||||
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" | target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" | ||||
define i32 @test(i1 %c.0, i32 %m) { | define i32 @test(i1 %c.0, i32 %m) { | ||||
; COMMON-LABEL: @test( | ; COMMON-LABEL: define i32 @test | ||||
; COMMON-SAME: (i1 [[C_0:%.*]], i32 [[M:%.*]]) { | |||||
; COMMON-NEXT: entry: | ; COMMON-NEXT: entry: | ||||
; COMMON-NEXT: br label [[OUTER_HEADER:%.*]] | ; COMMON-NEXT: br label [[OUTER_HEADER:%.*]] | ||||
; COMMON: outer.header: | ; COMMON: outer.header: | ||||
; COMMON-NEXT: [[INDVARS_IV1:%.*]] = phi i64 [ [[INDVARS_IV_NEXT2:%.*]], [[OUTER_LATCH:%.*]] ], [ 0, [[ENTRY:%.*]] ] | ; COMMON-NEXT: [[IV_1:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[IV_1_NEXT:%.*]], [[OUTER_LATCH:%.*]] ] | ||||
; DEFAULT-NEXT: [[INDVARS_IV:%.*]] = phi i32 [ [[INDVARS_IV_NEXT:%.*]], [[OUTER_LATCH]] ], [ 2, [[ENTRY]] ] | |||||
; COMMON-NEXT: [[IV_1:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[IV_1_NEXT:%.*]], [[OUTER_LATCH]] ] | |||||
; COMMON-NEXT: [[MAX_0:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[MAX_1:%.*]], [[OUTER_LATCH]] ] | ; COMMON-NEXT: [[MAX_0:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[MAX_1:%.*]], [[OUTER_LATCH]] ] | ||||
; COMMON-NEXT: [[TMP0:%.*]] = sext i32 [[IV_1]] to i64 | |||||
; COMMON-NEXT: br label [[INNER_1:%.*]] | ; COMMON-NEXT: br label [[INNER_1:%.*]] | ||||
; COMMON: inner.1: | ; COMMON: inner.1: | ||||
; COMMON-NEXT: [[C_1:%.*]] = icmp ult i64 0, [[INDVARS_IV1]] | ; COMMON-NEXT: [[C_1:%.*]] = icmp slt i64 0, [[TMP0]] | ||||
; COMMON-NEXT: br i1 [[C_1]], label [[INNER_1]], label [[INNER_2_HEADER_PREHEADER:%.*]] | ; COMMON-NEXT: br i1 [[C_1]], label [[INNER_1]], label [[INNER_2_HEADER_PREHEADER:%.*]] | ||||
; COMMON: inner.2.header.preheader: | ; COMMON: inner.2.header.preheader: | ||||
; COMMON-NEXT: br label [[INNER_2_HEADER:%.*]] | ; COMMON-NEXT: br label [[INNER_2_HEADER:%.*]] | ||||
; COMMON: inner.2.header: | ; COMMON: inner.2.header: | ||||
; COMMON-NEXT: [[IV_3:%.*]] = phi i32 [ [[IV_3_NEXT:%.*]], [[INNER_2_LATCH:%.*]] ], [ 0, [[INNER_2_HEADER_PREHEADER]] ] | ; COMMON-NEXT: [[IV_3:%.*]] = phi i32 [ [[IV_3_NEXT:%.*]], [[INNER_2_LATCH:%.*]] ], [ 0, [[INNER_2_HEADER_PREHEADER]] ] | ||||
; COMMON-NEXT: br i1 [[C_0:%.*]], label [[OUTER_LATCH]], label [[INNER_2_LATCH]] | ; COMMON-NEXT: br i1 [[C_0]], label [[OUTER_LATCH]], label [[INNER_2_LATCH]] | ||||
; COMMON: inner.2.latch: | ; COMMON: inner.2.latch: | ||||
; COMMON-NEXT: [[IV_3_NEXT]] = add i32 [[IV_3]], 1 | ; COMMON-NEXT: [[IV_3_NEXT]] = add i32 [[IV_3]], 1 | ||||
; DEFAULT-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[IV_3_NEXT]], [[INDVARS_IV]] | ; COMMON-NEXT: [[C_2:%.*]] = icmp ugt i32 [[IV_3]], [[IV_1]] | ||||
; LIMIT-NEXT: [[EXITCOND:%.*]] = icmp ugt i32 [[IV_3]], [[IV_1]] | ; COMMON-NEXT: br i1 [[C_2]], label [[OUTER_LATCH]], label [[INNER_2_HEADER]] | ||||
; COMMON-NEXT: br i1 [[EXITCOND]], label [[OUTER_LATCH]], label [[INNER_2_HEADER]] | |||||
; COMMON: outer.latch: | ; COMMON: outer.latch: | ||||
; COMMON-NEXT: [[MAX_1]] = phi i32 [ [[M:%.*]], [[INNER_2_LATCH]] ], [ 0, [[INNER_2_HEADER]] ] | ; COMMON-NEXT: [[MAX_1]] = phi i32 [ [[M]], [[INNER_2_LATCH]] ], [ 0, [[INNER_2_HEADER]] ] | ||||
; COMMON-NEXT: [[INDVARS_IV_NEXT2]] = add nuw nsw i64 [[INDVARS_IV1]], 1 | ; COMMON-NEXT: [[IV_1_NEXT]] = add i32 [[IV_1]], 1 | ||||
; COMMON-NEXT: [[IV_1_NEXT]] = add nuw i32 [[IV_1]], 1 | |||||
; COMMON-NEXT: [[C_3:%.*]] = icmp ugt i32 [[IV_1]], [[MAX_0]] | ; COMMON-NEXT: [[C_3:%.*]] = icmp ugt i32 [[IV_1]], [[MAX_0]] | ||||
; DEFAULT-NEXT: [[INDVARS_IV_NEXT]] = add i32 [[INDVARS_IV]], 1 | |||||
; COMMON-NEXT: br i1 [[C_3]], label [[EXIT:%.*]], label [[OUTER_HEADER]], !llvm.loop [[LOOP0:![0-9]+]] | ; COMMON-NEXT: br i1 [[C_3]], label [[EXIT:%.*]], label [[OUTER_HEADER]], !llvm.loop [[LOOP0:![0-9]+]] | ||||
; COMMON: exit: | ; COMMON: exit: | ||||
; COMMON-NEXT: ret i32 0 | ; COMMON-NEXT: ret i32 0 | ||||
; | ; | ||||
entry: | entry: | ||||
br label %outer.header | br label %outer.header | ||||
outer.header: | outer.header: | ||||
Show All 32 Lines |