[IndVar] Don't widen loop compare unless IV user is sign extended.

PR21030

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@218539 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chad Rosier
2014-09-26 20:05:35 +00:00
parent 07b7c98d61
commit 4150a8de76
2 changed files with 32 additions and 2 deletions

View File

@@ -650,7 +650,7 @@ namespace {
struct WideIVInfo {
PHINode *NarrowIV;
Type *WidestNativeType; // Widest integer type created [sz]ext
bool IsSigned; // Was an sext user seen before a zext?
bool IsSigned; // Was a sext user seen before a zext?
WideIVInfo() : NarrowIV(nullptr), WidestNativeType(nullptr),
IsSigned(false) {}
@@ -936,7 +936,11 @@ bool WidenIV::WidenLoopCompare(NarrowIVDefUse DU) {
if (!Cmp)
return false;
bool IsSigned = CmpInst::isSigned(Cmp->getPredicate());
// Must be a signed compare.
if (!CmpInst::isSigned(Cmp->getPredicate()))
return false;
// Must be a signed IV user.
if (!IsSigned)
return false;