forked from OSchip/llvm-project
[ARM] TypeSize lower bound for ARMCodeGenPrepare
We only try to promote types with are smaller than 16-bits, but we also need to check that the type is not less than 8-bits. Differential Revision: https://reviews.llvm.org/D50769 llvm-svn: 339770
This commit is contained in:
parent
8b4bd09e22
commit
fabf7fe5f8
|
@ -562,7 +562,7 @@ bool ARMCodeGenPrepare::isLegalToPromote(Value *V) {
|
||||||
bool ARMCodeGenPrepare::TryToPromote(Value *V) {
|
bool ARMCodeGenPrepare::TryToPromote(Value *V) {
|
||||||
OrigTy = V->getType();
|
OrigTy = V->getType();
|
||||||
TypeSize = OrigTy->getPrimitiveSizeInBits();
|
TypeSize = OrigTy->getPrimitiveSizeInBits();
|
||||||
if (TypeSize > 16)
|
if (TypeSize > 16 || TypeSize < 8)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!isSupportedValue(V) || !shouldPromote(V) || !isLegalToPromote(V))
|
if (!isSupportedValue(V) || !shouldPromote(V) || !isLegalToPromote(V))
|
||||||
|
|
|
@ -256,3 +256,27 @@ define i32 @icmp_not(i16 zeroext %arg0, i16 zeroext %arg1) {
|
||||||
ret i32 %res
|
ret i32 %res
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; CHECK-COMMON-LABEL: icmp_i1
|
||||||
|
; CHECK-NOT: uxt
|
||||||
|
define i32 @icmp_i1(i1* %arg0, i1 zeroext %arg1, i32 %a, i32 %b) {
|
||||||
|
entry:
|
||||||
|
%load = load i1, i1* %arg0
|
||||||
|
%not = xor i1 %load, 1
|
||||||
|
%cmp = icmp eq i1 %arg1, %not
|
||||||
|
%res = select i1 %cmp, i32 %a, i32 %b
|
||||||
|
ret i32 %res
|
||||||
|
}
|
||||||
|
|
||||||
|
; CHECK-COMMON-LABEL: icmp_i7
|
||||||
|
; CHECK-COMMON: ldrb
|
||||||
|
; CHECK-COMMON: and
|
||||||
|
; CHECK-COMMON: cmp
|
||||||
|
define i32 @icmp_i7(i7* %arg0, i7 zeroext %arg1, i32 %a, i32 %b) {
|
||||||
|
entry:
|
||||||
|
%load = load i7, i7* %arg0
|
||||||
|
%add = add nuw i7 %load, 1
|
||||||
|
%cmp = icmp ult i7 %arg1, %add
|
||||||
|
%res = select i1 %cmp, i32 %a, i32 %b
|
||||||
|
ret i32 %res
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue