[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / Transforms / IndVarSimplify / pr62992.ll
blobc8f47b57f1edaacec8d33f6e55f04e79a7016ce7
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
2 ; RUN: opt -S -passes=indvars < %s | FileCheck %s
4 declare void @use(i1)
6 ; Make sure the division does not get expanded into the preheader.
8 define i32 @test(i32 %arg) {
9 ; CHECK-LABEL: define i32 @test
10 ; CHECK-SAME: (i32 [[ARG:%.*]]) {
11 ; CHECK-NEXT:  entry:
12 ; CHECK-NEXT:    br label [[LOOP:%.*]]
13 ; CHECK:       loop:
14 ; CHECK-NEXT:    br i1 false, label [[IF:%.*]], label [[LOOP_LATCH:%.*]]
15 ; CHECK:       if:
16 ; CHECK-NEXT:    [[DIV:%.*]] = udiv i32 7, [[ARG]]
17 ; CHECK-NEXT:    [[CMP2:%.*]] = icmp ult i32 1, [[DIV]]
18 ; CHECK-NEXT:    call void @use(i1 [[CMP2]])
19 ; CHECK-NEXT:    br label [[LOOP_LATCH]]
20 ; CHECK:       loop.latch:
21 ; CHECK-NEXT:    br i1 false, label [[LOOP]], label [[EXIT:%.*]]
22 ; CHECK:       exit:
23 ; CHECK-NEXT:    ret i32 1
25 entry:
26   br label %loop
28 loop:
29   %iv = phi i32 [ 0, %entry ], [ %iv.next, %loop.latch ]
30   %iv.next = add i32 %iv, 1
31   %cmp = icmp eq i32 %iv, 1
32   br i1 %cmp, label %if, label %loop.latch
34 if:
35   %div = udiv i32 7, %arg
36   %cmp2 = icmp ult i32 %iv.next, %div
37   call void @use(i1 %cmp2)
38   br label %loop.latch
40 loop.latch:
41   br i1 false, label %loop, label %exit
43 exit:
44   %inc.lcssa = phi i32 [ %iv.next, %loop.latch ]
45   ret i32 %inc.lcssa