@@ -233,21 +233,22 @@ static Value *getValueOnEdge(LazyValueInfo *LVI, Value *Incoming,
233
233
// value can never be that constant. In that case replace the incoming
234
234
// value with the other value of the select. This often allows us to
235
235
// remove the select later.
236
+ if (!SI->getType ()->isFPOrFPVectorTy ()) {
237
+ // The "false" case
238
+ if (auto *C = dyn_cast<Constant>(SI->getFalseValue ()))
239
+ if (auto *Res = dyn_cast_or_null<ConstantInt>(LVI->getPredicateOnEdge (
240
+ ICmpInst::ICMP_EQ, SI, C, From, To, CxtI));
241
+ Res && Res->isZero ())
242
+ return SI->getTrueValue ();
236
243
237
- // The "false" case
238
- if (auto *C = dyn_cast<Constant>(SI->getFalseValue ()))
239
- if (auto *Res = dyn_cast_or_null<ConstantInt>(
240
- LVI->getPredicateOnEdge (ICmpInst::ICMP_EQ, SI, C, From, To, CxtI));
241
- Res && Res->isZero ())
242
- return SI->getTrueValue ();
243
-
244
- // The "true" case,
245
- // similar to the select "false" case, but try the select "true" value
246
- if (auto *C = dyn_cast<Constant>(SI->getTrueValue ()))
247
- if (auto *Res = dyn_cast_or_null<ConstantInt>(
248
- LVI->getPredicateOnEdge (ICmpInst::ICMP_EQ, SI, C, From, To, CxtI));
249
- Res && Res->isZero ())
250
- return SI->getFalseValue ();
244
+ // The "true" case,
245
+ // similar to the select "false" case, but try the select "true" value
246
+ if (auto *C = dyn_cast<Constant>(SI->getTrueValue ()))
247
+ if (auto *Res = dyn_cast_or_null<ConstantInt>(LVI->getPredicateOnEdge (
248
+ ICmpInst::ICMP_EQ, SI, C, From, To, CxtI));
249
+ Res && Res->isZero ())
250
+ return SI->getFalseValue ();
251
+ }
251
252
252
253
return nullptr ;
253
254
}
0 commit comments