@@ -1109,6 +1109,118 @@ define float @fcmp_ult_neginf_implies_class_assert(float %arg) {
1109
1109
ret float %mul_by_zero
1110
1110
}
1111
1111
1112
+ define i1 @isKnownNeverInfinity_vector_reduce_maximum (<4 x double > %x ) {
1113
+ ; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_maximum
1114
+ ; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1115
+ ; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1116
+ ; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmaximum.v4f64(<4 x double> [[NINF_X]])
1117
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1118
+ ; CHECK-NEXT: ret i1 [[CMP]]
1119
+ ;
1120
+ %ninf.x = fadd ninf <4 x double > %x , <double 1 .0 , double 1 .0 , double 1 .0 , double 1 .0 >
1121
+ %op = call double @llvm.vector.reduce.fmaximum.v4f64 (<4 x double > %ninf.x )
1122
+ %cmp = fcmp une double %op , 0x7ff0000000000000
1123
+ ret i1 %cmp
1124
+ }
1125
+
1126
+ define i1 @isKnownNeverInfinity_vector_reduce_maximum_fail (<4 x double > %x ) {
1127
+ ; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_maximum_fail
1128
+ ; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1129
+ ; CHECK-NEXT: [[NINF_X:%.*]] = fadd <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1130
+ ; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmaximum.v4f64(<4 x double> [[NINF_X]])
1131
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1132
+ ; CHECK-NEXT: ret i1 [[CMP]]
1133
+ ;
1134
+ %ninf.x = fadd <4 x double > %x , <double 1 .0 , double 1 .0 , double 1 .0 , double 1 .0 >
1135
+ %op = call double @llvm.vector.reduce.fmaximum.v4f64 (<4 x double > %ninf.x )
1136
+ %cmp = fcmp une double %op , 0x7ff0000000000000
1137
+ ret i1 %cmp
1138
+ }
1139
+
1140
+ define i1 @isKnownNeverInfinity_vector_reduce_minimum (<4 x double > %x ) {
1141
+ ; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_minimum
1142
+ ; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1143
+ ; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1144
+ ; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fminimum.v4f64(<4 x double> [[NINF_X]])
1145
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1146
+ ; CHECK-NEXT: ret i1 [[CMP]]
1147
+ ;
1148
+ %ninf.x = fadd ninf <4 x double > %x , <double 1 .0 , double 1 .0 , double 1 .0 , double 1 .0 >
1149
+ %op = call double @llvm.vector.reduce.fminimum.v4f64 (<4 x double > %ninf.x )
1150
+ %cmp = fcmp une double %op , 0x7ff0000000000000
1151
+ ret i1 %cmp
1152
+ }
1153
+
1154
+ define i1 @isKnownNeverInfinity_vector_reduce_minimum_fail (<4 x double > %x ) {
1155
+ ; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_minimum_fail
1156
+ ; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1157
+ ; CHECK-NEXT: [[NINF_X:%.*]] = fadd <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1158
+ ; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fminimum.v4f64(<4 x double> [[NINF_X]])
1159
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1160
+ ; CHECK-NEXT: ret i1 [[CMP]]
1161
+ ;
1162
+ %ninf.x = fadd <4 x double > %x , <double 1 .0 , double 1 .0 , double 1 .0 , double 1 .0 >
1163
+ %op = call double @llvm.vector.reduce.fminimum.v4f64 (<4 x double > %ninf.x )
1164
+ %cmp = fcmp une double %op , 0x7ff0000000000000
1165
+ ret i1 %cmp
1166
+ }
1167
+
1168
+ define i1 @isKnownNeverInfinity_vector_reduce_fmax (<4 x double > %x ) {
1169
+ ; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_fmax
1170
+ ; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1171
+ ; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1172
+ ; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmax.v4f64(<4 x double> [[NINF_X]])
1173
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1174
+ ; CHECK-NEXT: ret i1 [[CMP]]
1175
+ ;
1176
+ %ninf.x = fadd ninf <4 x double > %x , <double 1 .0 , double 1 .0 , double 1 .0 , double 1 .0 >
1177
+ %op = call double @llvm.vector.reduce.fmax.v4f64 (<4 x double > %ninf.x )
1178
+ %cmp = fcmp une double %op , 0x7ff0000000000000
1179
+ ret i1 %cmp
1180
+ }
1181
+
1182
+ define i1 @isKnownNeverInfinity_vector_reduce_fmax_fail (<4 x double > %x ) {
1183
+ ; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_fmax_fail
1184
+ ; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1185
+ ; CHECK-NEXT: [[NINF_X:%.*]] = fadd <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1186
+ ; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmax.v4f64(<4 x double> [[NINF_X]])
1187
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1188
+ ; CHECK-NEXT: ret i1 [[CMP]]
1189
+ ;
1190
+ %ninf.x = fadd <4 x double > %x , <double 1 .0 , double 1 .0 , double 1 .0 , double 1 .0 >
1191
+ %op = call double @llvm.vector.reduce.fmax.v4f64 (<4 x double > %ninf.x )
1192
+ %cmp = fcmp une double %op , 0x7ff0000000000000
1193
+ ret i1 %cmp
1194
+ }
1195
+
1196
+ define i1 @isKnownNeverInfinity_vector_reduce_fmin (<4 x double > %x ) {
1197
+ ; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_fmin
1198
+ ; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1199
+ ; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1200
+ ; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmin.v4f64(<4 x double> [[NINF_X]])
1201
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1202
+ ; CHECK-NEXT: ret i1 [[CMP]]
1203
+ ;
1204
+ %ninf.x = fadd ninf <4 x double > %x , <double 1 .0 , double 1 .0 , double 1 .0 , double 1 .0 >
1205
+ %op = call double @llvm.vector.reduce.fmin.v4f64 (<4 x double > %ninf.x )
1206
+ %cmp = fcmp une double %op , 0x7ff0000000000000
1207
+ ret i1 %cmp
1208
+ }
1209
+
1210
+ define i1 @isKnownNeverInfinity_vector_reduce_fmin_fail (<4 x double > %x ) {
1211
+ ; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_fmin_fail
1212
+ ; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1213
+ ; CHECK-NEXT: [[NINF_X:%.*]] = fadd <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1214
+ ; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmin.v4f64(<4 x double> [[NINF_X]])
1215
+ ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1216
+ ; CHECK-NEXT: ret i1 [[CMP]]
1217
+ ;
1218
+ %ninf.x = fadd <4 x double > %x , <double 1 .0 , double 1 .0 , double 1 .0 , double 1 .0 >
1219
+ %op = call double @llvm.vector.reduce.fmin.v4f64 (<4 x double > %ninf.x )
1220
+ %cmp = fcmp une double %op , 0x7ff0000000000000
1221
+ ret i1 %cmp
1222
+ }
1223
+
1112
1224
declare double @llvm.arithmetic.fence.f64 (double )
1113
1225
declare double @llvm.canonicalize.f64 (double )
1114
1226
declare double @llvm.ceil.f64 (double )
0 commit comments