@@ -64,89 +64,88 @@ define void @vdiv(ptr %x, ptr %y, double %a, i32 %N) #0 {
64
64
; CHECK-NEXT: br i1 [[CMP_N]], label [[FOR_END]], label [[FOR_BODY_PREHEADER9]]
65
65
; CHECK: for.body.preheader9:
66
66
; CHECK-NEXT: [[INDVARS_IV_PH:%.*]] = phi i64 [ 0, [[FOR_BODY_PREHEADER]] ], [ [[N_VEC]], [[MIDDLE_BLOCK]] ]
67
- ; CHECK-NEXT: [[TMP18:%.*]] = xor i64 [[INDVARS_IV_PH]], -1
68
- ; CHECK-NEXT: [[TMP19:%.*]] = add nsw i64 [[TMP18]], [[WIDE_TRIP_COUNT]]
69
67
; CHECK-NEXT: [[XTRAITER:%.*]] = and i64 [[WIDE_TRIP_COUNT]], 7
70
68
; CHECK-NEXT: [[LCMP_MOD_NOT:%.*]] = icmp eq i64 [[XTRAITER]], 0
71
69
; CHECK-NEXT: br i1 [[LCMP_MOD_NOT]], label [[FOR_BODY_PROL_LOOPEXIT:%.*]], label [[FOR_BODY_PROL_PREHEADER:%.*]]
72
70
; CHECK: for.body.prol.preheader:
73
- ; CHECK-NEXT: [[TMP20 :%.*]] = fdiv fast double 1.000000e+00, [[A]]
71
+ ; CHECK-NEXT: [[TMP18 :%.*]] = fdiv fast double 1.000000e+00, [[A]]
74
72
; CHECK-NEXT: br label [[FOR_BODY_PROL:%.*]]
75
73
; CHECK: for.body.prol:
76
74
; CHECK-NEXT: [[INDVARS_IV_PROL:%.*]] = phi i64 [ [[INDVARS_IV_NEXT_PROL:%.*]], [[FOR_BODY_PROL]] ], [ [[INDVARS_IV_PH]], [[FOR_BODY_PROL_PREHEADER]] ]
77
75
; CHECK-NEXT: [[PROL_ITER:%.*]] = phi i64 [ [[PROL_ITER_NEXT:%.*]], [[FOR_BODY_PROL]] ], [ 0, [[FOR_BODY_PROL_PREHEADER]] ]
78
76
; CHECK-NEXT: [[ARRAYIDX_PROL:%.*]] = getelementptr inbounds double, ptr [[Y]], i64 [[INDVARS_IV_PROL]]
79
77
; CHECK-NEXT: [[T0_PROL:%.*]] = load double, ptr [[ARRAYIDX_PROL]], align 8, !tbaa [[TBAA3]]
80
- ; CHECK-NEXT: [[TMP21 :%.*]] = fmul fast double [[T0_PROL]], [[TMP20 ]]
78
+ ; CHECK-NEXT: [[TMP19 :%.*]] = fmul fast double [[T0_PROL]], [[TMP18 ]]
81
79
; CHECK-NEXT: [[ARRAYIDX2_PROL:%.*]] = getelementptr inbounds double, ptr [[X]], i64 [[INDVARS_IV_PROL]]
82
- ; CHECK-NEXT: store double [[TMP21 ]], ptr [[ARRAYIDX2_PROL]], align 8, !tbaa [[TBAA3]]
80
+ ; CHECK-NEXT: store double [[TMP19 ]], ptr [[ARRAYIDX2_PROL]], align 8, !tbaa [[TBAA3]]
83
81
; CHECK-NEXT: [[INDVARS_IV_NEXT_PROL]] = add nuw nsw i64 [[INDVARS_IV_PROL]], 1
84
82
; CHECK-NEXT: [[PROL_ITER_NEXT]] = add i64 [[PROL_ITER]], 1
85
83
; CHECK-NEXT: [[PROL_ITER_CMP_NOT:%.*]] = icmp eq i64 [[PROL_ITER_NEXT]], [[XTRAITER]]
86
84
; CHECK-NEXT: br i1 [[PROL_ITER_CMP_NOT]], label [[FOR_BODY_PROL_LOOPEXIT]], label [[FOR_BODY_PROL]], !llvm.loop [[LOOP10:![0-9]+]]
87
85
; CHECK: for.body.prol.loopexit:
88
86
; CHECK-NEXT: [[INDVARS_IV_UNR:%.*]] = phi i64 [ [[INDVARS_IV_PH]], [[FOR_BODY_PREHEADER9]] ], [ [[INDVARS_IV_NEXT_PROL]], [[FOR_BODY_PROL]] ]
89
- ; CHECK-NEXT: [[TMP22:%.*]] = icmp ult i64 [[TMP19]], 7
90
- ; CHECK-NEXT: br i1 [[TMP22]], label [[FOR_END]], label [[FOR_BODY_PREHEADER9_NEW:%.*]]
87
+ ; CHECK-NEXT: [[TMP20:%.*]] = sub nsw i64 [[INDVARS_IV_PH]], [[WIDE_TRIP_COUNT]]
88
+ ; CHECK-NEXT: [[TMP21:%.*]] = icmp ugt i64 [[TMP20]], -8
89
+ ; CHECK-NEXT: br i1 [[TMP21]], label [[FOR_END]], label [[FOR_BODY_PREHEADER9_NEW:%.*]]
91
90
; CHECK: for.body.preheader9.new:
91
+ ; CHECK-NEXT: [[TMP22:%.*]] = fdiv fast double 1.000000e+00, [[A]]
92
92
; CHECK-NEXT: [[TMP23:%.*]] = fdiv fast double 1.000000e+00, [[A]]
93
93
; CHECK-NEXT: [[TMP24:%.*]] = fdiv fast double 1.000000e+00, [[A]]
94
94
; CHECK-NEXT: [[TMP25:%.*]] = fdiv fast double 1.000000e+00, [[A]]
95
95
; CHECK-NEXT: [[TMP26:%.*]] = fdiv fast double 1.000000e+00, [[A]]
96
96
; CHECK-NEXT: [[TMP27:%.*]] = fdiv fast double 1.000000e+00, [[A]]
97
97
; CHECK-NEXT: [[TMP28:%.*]] = fdiv fast double 1.000000e+00, [[A]]
98
98
; CHECK-NEXT: [[TMP29:%.*]] = fdiv fast double 1.000000e+00, [[A]]
99
- ; CHECK-NEXT: [[TMP30:%.*]] = fdiv fast double 1.000000e+00, [[A]]
100
99
; CHECK-NEXT: br label [[FOR_BODY:%.*]]
101
100
; CHECK: for.body:
102
101
; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ [[INDVARS_IV_UNR]], [[FOR_BODY_PREHEADER9_NEW]] ], [ [[INDVARS_IV_NEXT_7:%.*]], [[FOR_BODY]] ]
103
102
; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds double, ptr [[Y]], i64 [[INDVARS_IV]]
104
103
; CHECK-NEXT: [[T0:%.*]] = load double, ptr [[ARRAYIDX]], align 8, !tbaa [[TBAA3]]
105
- ; CHECK-NEXT: [[TMP31 :%.*]] = fmul fast double [[T0]], [[TMP23 ]]
104
+ ; CHECK-NEXT: [[TMP30 :%.*]] = fmul fast double [[T0]], [[TMP22 ]]
106
105
; CHECK-NEXT: [[ARRAYIDX2:%.*]] = getelementptr inbounds double, ptr [[X]], i64 [[INDVARS_IV]]
107
- ; CHECK-NEXT: store double [[TMP31 ]], ptr [[ARRAYIDX2]], align 8, !tbaa [[TBAA3]]
106
+ ; CHECK-NEXT: store double [[TMP30 ]], ptr [[ARRAYIDX2]], align 8, !tbaa [[TBAA3]]
108
107
; CHECK-NEXT: [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 1
109
108
; CHECK-NEXT: [[ARRAYIDX_1:%.*]] = getelementptr inbounds double, ptr [[Y]], i64 [[INDVARS_IV_NEXT]]
110
109
; CHECK-NEXT: [[T0_1:%.*]] = load double, ptr [[ARRAYIDX_1]], align 8, !tbaa [[TBAA3]]
111
- ; CHECK-NEXT: [[TMP32 :%.*]] = fmul fast double [[T0_1]], [[TMP24 ]]
110
+ ; CHECK-NEXT: [[TMP31 :%.*]] = fmul fast double [[T0_1]], [[TMP23 ]]
112
111
; CHECK-NEXT: [[ARRAYIDX2_1:%.*]] = getelementptr inbounds double, ptr [[X]], i64 [[INDVARS_IV_NEXT]]
113
- ; CHECK-NEXT: store double [[TMP32 ]], ptr [[ARRAYIDX2_1]], align 8, !tbaa [[TBAA3]]
112
+ ; CHECK-NEXT: store double [[TMP31 ]], ptr [[ARRAYIDX2_1]], align 8, !tbaa [[TBAA3]]
114
113
; CHECK-NEXT: [[INDVARS_IV_NEXT_1:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 2
115
114
; CHECK-NEXT: [[ARRAYIDX_2:%.*]] = getelementptr inbounds double, ptr [[Y]], i64 [[INDVARS_IV_NEXT_1]]
116
115
; CHECK-NEXT: [[T0_2:%.*]] = load double, ptr [[ARRAYIDX_2]], align 8, !tbaa [[TBAA3]]
117
- ; CHECK-NEXT: [[TMP33 :%.*]] = fmul fast double [[T0_2]], [[TMP25 ]]
116
+ ; CHECK-NEXT: [[TMP32 :%.*]] = fmul fast double [[T0_2]], [[TMP24 ]]
118
117
; CHECK-NEXT: [[ARRAYIDX2_2:%.*]] = getelementptr inbounds double, ptr [[X]], i64 [[INDVARS_IV_NEXT_1]]
119
- ; CHECK-NEXT: store double [[TMP33 ]], ptr [[ARRAYIDX2_2]], align 8, !tbaa [[TBAA3]]
118
+ ; CHECK-NEXT: store double [[TMP32 ]], ptr [[ARRAYIDX2_2]], align 8, !tbaa [[TBAA3]]
120
119
; CHECK-NEXT: [[INDVARS_IV_NEXT_2:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 3
121
120
; CHECK-NEXT: [[ARRAYIDX_3:%.*]] = getelementptr inbounds double, ptr [[Y]], i64 [[INDVARS_IV_NEXT_2]]
122
121
; CHECK-NEXT: [[T0_3:%.*]] = load double, ptr [[ARRAYIDX_3]], align 8, !tbaa [[TBAA3]]
123
- ; CHECK-NEXT: [[TMP34 :%.*]] = fmul fast double [[T0_3]], [[TMP26 ]]
122
+ ; CHECK-NEXT: [[TMP33 :%.*]] = fmul fast double [[T0_3]], [[TMP25 ]]
124
123
; CHECK-NEXT: [[ARRAYIDX2_3:%.*]] = getelementptr inbounds double, ptr [[X]], i64 [[INDVARS_IV_NEXT_2]]
125
- ; CHECK-NEXT: store double [[TMP34 ]], ptr [[ARRAYIDX2_3]], align 8, !tbaa [[TBAA3]]
124
+ ; CHECK-NEXT: store double [[TMP33 ]], ptr [[ARRAYIDX2_3]], align 8, !tbaa [[TBAA3]]
126
125
; CHECK-NEXT: [[INDVARS_IV_NEXT_3:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 4
127
126
; CHECK-NEXT: [[ARRAYIDX_4:%.*]] = getelementptr inbounds double, ptr [[Y]], i64 [[INDVARS_IV_NEXT_3]]
128
127
; CHECK-NEXT: [[T0_4:%.*]] = load double, ptr [[ARRAYIDX_4]], align 8, !tbaa [[TBAA3]]
129
- ; CHECK-NEXT: [[TMP35 :%.*]] = fmul fast double [[T0_4]], [[TMP27 ]]
128
+ ; CHECK-NEXT: [[TMP34 :%.*]] = fmul fast double [[T0_4]], [[TMP26 ]]
130
129
; CHECK-NEXT: [[ARRAYIDX2_4:%.*]] = getelementptr inbounds double, ptr [[X]], i64 [[INDVARS_IV_NEXT_3]]
131
- ; CHECK-NEXT: store double [[TMP35 ]], ptr [[ARRAYIDX2_4]], align 8, !tbaa [[TBAA3]]
130
+ ; CHECK-NEXT: store double [[TMP34 ]], ptr [[ARRAYIDX2_4]], align 8, !tbaa [[TBAA3]]
132
131
; CHECK-NEXT: [[INDVARS_IV_NEXT_4:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 5
133
132
; CHECK-NEXT: [[ARRAYIDX_5:%.*]] = getelementptr inbounds double, ptr [[Y]], i64 [[INDVARS_IV_NEXT_4]]
134
133
; CHECK-NEXT: [[T0_5:%.*]] = load double, ptr [[ARRAYIDX_5]], align 8, !tbaa [[TBAA3]]
135
- ; CHECK-NEXT: [[TMP36 :%.*]] = fmul fast double [[T0_5]], [[TMP28 ]]
134
+ ; CHECK-NEXT: [[TMP35 :%.*]] = fmul fast double [[T0_5]], [[TMP27 ]]
136
135
; CHECK-NEXT: [[ARRAYIDX2_5:%.*]] = getelementptr inbounds double, ptr [[X]], i64 [[INDVARS_IV_NEXT_4]]
137
- ; CHECK-NEXT: store double [[TMP36 ]], ptr [[ARRAYIDX2_5]], align 8, !tbaa [[TBAA3]]
136
+ ; CHECK-NEXT: store double [[TMP35 ]], ptr [[ARRAYIDX2_5]], align 8, !tbaa [[TBAA3]]
138
137
; CHECK-NEXT: [[INDVARS_IV_NEXT_5:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 6
139
138
; CHECK-NEXT: [[ARRAYIDX_6:%.*]] = getelementptr inbounds double, ptr [[Y]], i64 [[INDVARS_IV_NEXT_5]]
140
139
; CHECK-NEXT: [[T0_6:%.*]] = load double, ptr [[ARRAYIDX_6]], align 8, !tbaa [[TBAA3]]
141
- ; CHECK-NEXT: [[TMP37 :%.*]] = fmul fast double [[T0_6]], [[TMP29 ]]
140
+ ; CHECK-NEXT: [[TMP36 :%.*]] = fmul fast double [[T0_6]], [[TMP28 ]]
142
141
; CHECK-NEXT: [[ARRAYIDX2_6:%.*]] = getelementptr inbounds double, ptr [[X]], i64 [[INDVARS_IV_NEXT_5]]
143
- ; CHECK-NEXT: store double [[TMP37 ]], ptr [[ARRAYIDX2_6]], align 8, !tbaa [[TBAA3]]
142
+ ; CHECK-NEXT: store double [[TMP36 ]], ptr [[ARRAYIDX2_6]], align 8, !tbaa [[TBAA3]]
144
143
; CHECK-NEXT: [[INDVARS_IV_NEXT_6:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 7
145
144
; CHECK-NEXT: [[ARRAYIDX_7:%.*]] = getelementptr inbounds double, ptr [[Y]], i64 [[INDVARS_IV_NEXT_6]]
146
145
; CHECK-NEXT: [[T0_7:%.*]] = load double, ptr [[ARRAYIDX_7]], align 8, !tbaa [[TBAA3]]
147
- ; CHECK-NEXT: [[TMP38 :%.*]] = fmul fast double [[T0_7]], [[TMP30 ]]
146
+ ; CHECK-NEXT: [[TMP37 :%.*]] = fmul fast double [[T0_7]], [[TMP29 ]]
148
147
; CHECK-NEXT: [[ARRAYIDX2_7:%.*]] = getelementptr inbounds double, ptr [[X]], i64 [[INDVARS_IV_NEXT_6]]
149
- ; CHECK-NEXT: store double [[TMP38 ]], ptr [[ARRAYIDX2_7]], align 8, !tbaa [[TBAA3]]
148
+ ; CHECK-NEXT: store double [[TMP37 ]], ptr [[ARRAYIDX2_7]], align 8, !tbaa [[TBAA3]]
150
149
; CHECK-NEXT: [[INDVARS_IV_NEXT_7]] = add nuw nsw i64 [[INDVARS_IV]], 8
151
150
; CHECK-NEXT: [[EXITCOND_NOT_7:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT_7]], [[WIDE_TRIP_COUNT]]
152
151
; CHECK-NEXT: br i1 [[EXITCOND_NOT_7]], label [[FOR_END]], label [[FOR_BODY]], !llvm.loop [[LOOP12:![0-9]+]]
0 commit comments