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:
parent
138437ad27
commit
69cdae5eb9
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user