1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-02-01 05:01:59 +01:00

For immediate encodings of icmp, zero or sign extend first. Then

determine if the value is negative and flip the sign accordingly.
rdar://10422026

llvm-svn: 144258
This commit is contained in:
Chad Rosier 2011-11-10 01:30:39 +00:00
parent 138437ad27
commit 69cdae5eb9
2 changed files with 22 additions and 5 deletions

View File

@ -1216,7 +1216,6 @@ bool ARMFastISel::ARMEmitCmp(const Value *Src1Value, const Value *Src2Value,
// Check to see if the 2nd operand is a constant that we can encode directly
// in the compare.
uint64_t Imm;
int EncodedImm = 0;
bool EncodeImm = false;
bool isNegativeImm = false;
@ -1224,10 +1223,11 @@ bool ARMFastISel::ARMEmitCmp(const Value *Src1Value, const Value *Src2Value,
if (SrcVT == MVT::i32 || SrcVT == MVT::i16 || SrcVT == MVT::i8 ||
SrcVT == MVT::i1) {
const APInt &CIVal = ConstInt->getValue();
isNegativeImm = CIVal.isNegative();
Imm = (isNegativeImm) ? (-CIVal).getZExtValue() : CIVal.getZExtValue();
EncodedImm = (int)Imm;
EncodedImm = (isZExt) ? (int)CIVal.getZExtValue() : (int)CIVal.getSExtValue();
if (EncodedImm < 0) {
isNegativeImm = true;
EncodedImm = -EncodedImm;
}
EncodeImm = isThumb2 ? (ARM_AM::getT2SOImmVal(EncodedImm) != -1) :
(ARM_AM::getSOImmVal(EncodedImm) != -1);
}

View File

@ -212,3 +212,20 @@ if.then: ; preds = %entry
if.end: ; preds = %if.then, %entry
ret void
}
define void @t12(i8 %a) uwtable ssp {
entry:
; ARM: t12
; THUMB: t12
%cmp = icmp ugt i8 %a, -113
; ARM: cmp r{{[0-9]}}, #143
; THUMB: cmp r{{[0-9]}}, #143
br i1 %cmp, label %if.then, label %if.end
if.then: ; preds = %entry
tail call void @foo()
br label %if.end
if.end: ; preds = %if.then, %entry
ret void
}