1
+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
1
2
; RUN: opt < %s -passes=indvars -S | FileCheck %s
2
3
3
4
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1"
4
5
target triple = "x86_64-unknown-linux-gnu"
5
6
6
7
declare void @foo (i64 )
7
8
8
- ; CHECK-LABEL: @test
9
9
define void @test (i64 %a ) {
10
+ ; CHECK-LABEL: define void @test(
11
+ ; CHECK-SAME: i64 [[A:%.*]]) {
12
+ ; CHECK-NEXT: entry:
13
+ ; CHECK-NEXT: br label [[OUTER_HEADER:%.*]]
14
+ ; CHECK: outer_header:
15
+ ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[OUTER_LATCH:%.*]] ], [ 21, [[ENTRY:%.*]] ]
16
+ ; CHECK-NEXT: [[I:%.*]] = phi i64 [ 20, [[ENTRY]] ], [ [[I_NEXT:%.*]], [[OUTER_LATCH]] ]
17
+ ; CHECK-NEXT: br label [[INNER_HEADER:%.*]]
18
+ ; CHECK: inner_header:
19
+ ; CHECK-NEXT: [[J:%.*]] = phi i64 [ 1, [[OUTER_HEADER]] ], [ [[J_NEXT:%.*]], [[INNER_HEADER]] ]
20
+ ; CHECK-NEXT: call void @foo(i64 [[J]])
21
+ ; CHECK-NEXT: [[J_NEXT]] = add nuw nsw i64 [[J]], 1
22
+ ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[J_NEXT]], [[INDVARS_IV]]
23
+ ; CHECK-NEXT: br i1 [[EXITCOND]], label [[INNER_HEADER]], label [[OUTER_LATCH]]
24
+ ; CHECK: outer_latch:
25
+ ; CHECK-NEXT: [[I_NEXT]] = add nuw nsw i64 [[I]], 1
26
+ ; CHECK-NEXT: [[COND2:%.*]] = icmp ne i64 [[I_NEXT]], 40
27
+ ; CHECK-NEXT: [[INDVARS_IV_NEXT]] = add nuw nsw i64 [[INDVARS_IV]], 1
28
+ ; CHECK-NEXT: br i1 [[COND2]], label [[OUTER_HEADER]], label [[RETURN:%.*]]
29
+ ; CHECK: return:
30
+ ; CHECK-NEXT: ret void
31
+ ;
10
32
entry:
11
33
br label %outer_header
12
34
@@ -18,9 +40,7 @@ outer_header:
18
40
inner_header:
19
41
%j = phi i64 [1 , %outer_header ], [%j.next , %inner_header ]
20
42
%cmp = icmp ult i64 %j , %i.next
21
- ; CHECK-NOT: select
22
43
%s = select i1 %cmp , i64 %j , i64 %i
23
- ; CHECK: call void @foo(i64 %j)
24
44
call void @foo (i64 %s )
25
45
%j.next = add nuw nsw i64 %j , 1
26
46
%cond = icmp ult i64 %j , %i
0 commit comments