mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-27 16:17:17 +00:00
[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:
@@ -650,7 +650,7 @@ namespace {
|
|||||||
struct WideIVInfo {
|
struct WideIVInfo {
|
||||||
PHINode *NarrowIV;
|
PHINode *NarrowIV;
|
||||||
Type *WidestNativeType; // Widest integer type created [sz]ext
|
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),
|
WideIVInfo() : NarrowIV(nullptr), WidestNativeType(nullptr),
|
||||||
IsSigned(false) {}
|
IsSigned(false) {}
|
||||||
@@ -936,7 +936,11 @@ bool WidenIV::WidenLoopCompare(NarrowIVDefUse DU) {
|
|||||||
if (!Cmp)
|
if (!Cmp)
|
||||||
return false;
|
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)
|
if (!IsSigned)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@@ -136,3 +136,29 @@ for.body:
|
|||||||
for.end:
|
for.end:
|
||||||
ret i32 %sum.0
|
ret i32 %sum.0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare i32 @fn1(i8 signext)
|
||||||
|
|
||||||
|
; PR21030
|
||||||
|
; CHECK-LABEL: @test4
|
||||||
|
; CHECK: for.body:
|
||||||
|
; CHECK: phi i32
|
||||||
|
; CHECK: icmp sgt i8
|
||||||
|
|
||||||
|
define i32 @test4(i32 %a) {
|
||||||
|
entry:
|
||||||
|
br label %for.body
|
||||||
|
|
||||||
|
for.body:
|
||||||
|
%c.07 = phi i8 [ -3, %entry ], [ %dec, %for.body ]
|
||||||
|
%conv6 = zext i8 %c.07 to i32
|
||||||
|
%or = or i32 %a, %conv6
|
||||||
|
%conv3 = trunc i32 %or to i8
|
||||||
|
%call = call i32 @fn1(i8 signext %conv3)
|
||||||
|
%dec = add i8 %c.07, -1
|
||||||
|
%cmp = icmp sgt i8 %dec, -14
|
||||||
|
br i1 %cmp, label %for.body, label %for.end
|
||||||
|
|
||||||
|
for.end:
|
||||||
|
ret i32 0
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user