6
6
; status. This was caught by the expensive check introduced in D86589.
7
7
8
8
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
9
- target triple = "x86_64-unknown-linux-gnu"
10
9
11
- @ptr = external global i64
12
-
13
- define dso_local void @hoge () local_unnamed_addr {
10
+ define void @hoge (i64 %x , i64 %idx.start , ptr %ptr ) {
14
11
; CHECK-LABEL: @hoge(
15
12
; CHECK-NEXT: entry:
16
- ; CHECK-NEXT: [[N:%.*]] = sdiv exact i64 undef, 40
17
- ; CHECK-NEXT: [[TMP0:%.*]] = sub i64 undef, [[N]]
13
+ ; CHECK-NEXT: [[N:%.*]] = sdiv exact i64 [[X:%.*]], 40
14
+ ; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[IDX_START:%.*]], 1
15
+ ; CHECK-NEXT: [[TMP1:%.*]] = sub i64 [[TMP0]], [[N]]
18
16
; CHECK-NEXT: br label [[HEADER:%.*]]
19
17
; CHECK: header:
20
- ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[LATCH:%.*]] ], [ [[TMP0 ]], [[ENTRY:%.*]] ]
21
- ; CHECK-NEXT: [[IDX:%.*]] = phi i64 [ [[IDX_NEXT:%.*]], [[LATCH]] ], [ undef , [[ENTRY]] ]
18
+ ; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_NEXT:%.*]], [[LATCH:%.*]] ], [ [[TMP1 ]], [[ENTRY:%.*]] ]
19
+ ; CHECK-NEXT: [[IDX:%.*]] = phi i64 [ [[IDX_NEXT:%.*]], [[LATCH]] ], [ [[IDX_START]] , [[ENTRY]] ]
22
20
; CHECK-NEXT: [[COND:%.*]] = icmp sgt i64 [[N]], [[IDX]]
23
21
; CHECK-NEXT: br i1 [[COND]], label [[END:%.*]], label [[INNER_PREHEADER:%.*]]
24
22
; CHECK: inner.preheader:
25
23
; CHECK-NEXT: br label [[INNER:%.*]]
26
24
; CHECK: inner:
27
25
; CHECK-NEXT: [[I:%.*]] = phi i64 [ [[I_NEXT:%.*]], [[INNER]] ], [ 0, [[INNER_PREHEADER]] ]
28
26
; CHECK-NEXT: [[I_NEXT]] = add nuw i64 [[I]], 1
29
- ; CHECK-NEXT: store i64 undef , ptr @ptr , align 8
27
+ ; CHECK-NEXT: store i64 0 , ptr [[PTR:%.*]] , align 8
30
28
; CHECK-NEXT: [[EXITCOND:%.*]] = icmp ne i64 [[I_NEXT]], [[INDVARS_IV]]
31
29
; CHECK-NEXT: br i1 [[EXITCOND]], label [[INNER]], label [[INNER_EXIT:%.*]]
32
30
; CHECK: inner_exit:
@@ -41,11 +39,11 @@ define dso_local void @hoge() local_unnamed_addr {
41
39
; CHECK-NEXT: ret void
42
40
;
43
41
entry: ; preds = %entry
44
- %n = sdiv exact i64 undef , 40
42
+ %n = sdiv exact i64 %x , 40
45
43
br label %header
46
44
47
45
header: ; preds = %latch, %entry
48
- %idx = phi i64 [ %idx.next , %latch ], [ undef , %entry ]
46
+ %idx = phi i64 [ %idx.next , %latch ], [ %idx.start , %entry ]
49
47
%cond = icmp sgt i64 %n , %idx
50
48
br i1 %cond , label %end , label %inner
51
49
@@ -54,7 +52,7 @@ inner: ; preds = %inner, %header
54
52
%j = phi i64 [ %j.next , %inner ], [ %n , %header ]
55
53
%i.next = add nsw i64 %i , 1
56
54
%j.next = add nsw i64 %j , 1
57
- store i64 undef , ptr @ ptr
55
+ store i64 0 , ptr % ptr
58
56
%cond1 = icmp slt i64 %j , %idx
59
57
br i1 %cond1 , label %inner , label %inner_exit
60
58
0 commit comments