[llvm] r346499 - [ARM] Don't promote i1 types in ARM CGP
Sam Parker via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 9 07:06:33 PST 2018
Author: sam_parker
Date: Fri Nov 9 07:06:33 2018
New Revision: 346499
URL: http://llvm.org/viewvc/llvm-project?rev=346499&view=rev
Log:
[ARM] Don't promote i1 types in ARM CGP
Now that we have mixed type sizes, i1 values need to be explicitly
handled as we want to avoid promoting these values.
Differential Revision: https://reviews.llvm.org/D54308
Modified:
llvm/trunk/lib/Target/ARM/ARMCodeGenPrepare.cpp
llvm/trunk/test/CodeGen/ARM/CGP/arm-cgp-calls.ll
llvm/trunk/test/CodeGen/ARM/CGP/arm-cgp-casts.ll
Modified: llvm/trunk/lib/Target/ARM/ARMCodeGenPrepare.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMCodeGenPrepare.cpp?rev=346499&r1=346498&r2=346499&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMCodeGenPrepare.cpp (original)
+++ llvm/trunk/lib/Target/ARM/ARMCodeGenPrepare.cpp Fri Nov 9 07:06:33 2018
@@ -206,7 +206,8 @@ static bool isSupportedType(Value *V) {
if (auto *Ld = dyn_cast<LoadInst>(V))
Ty = cast<PointerType>(Ld->getPointerOperandType())->getElementType();
- if (!isa<IntegerType>(Ty))
+ if (!isa<IntegerType>(Ty) ||
+ cast<IntegerType>(V->getType())->getBitWidth() == 1)
return false;
return LessOrEqualTypeSize(V);
@@ -222,6 +223,7 @@ static bool isSupportedType(Value *V) {
static bool isSource(Value *V) {
if (!isa<IntegerType>(V->getType()))
return false;
+
// TODO Allow zext to be sources.
if (isa<Argument>(V))
return true;
Modified: llvm/trunk/test/CodeGen/ARM/CGP/arm-cgp-calls.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/CGP/arm-cgp-calls.ll?rev=346499&r1=346498&r2=346499&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/CGP/arm-cgp-calls.ll (original)
+++ llvm/trunk/test/CodeGen/ARM/CGP/arm-cgp-calls.ll Fri Nov 9 07:06:33 2018
@@ -177,6 +177,30 @@ entry:
ret i1 %tobool
}
+; CHECK-LABEL: i1_zeroext_call
+; CHECK: uxt
+define i1 @i1_zeroext_call(i16* %ts, i32 %a, i16* %b, i8* %c) {
+entry:
+ %0 = load i16, i16* %ts, align 2
+ %conv.i860 = trunc i32 %a to i16
+ store i16 %conv.i860, i16* %b, align 2
+ %call.i848 = call zeroext i1 @i1_zeroext(i8* %c, i32 64, i16 zeroext %conv.i860)
+ br i1 %call.i848, label %if.then223, label %if.else227
+
+if.then223:
+ %cmp235 = icmp eq i16 %0, %conv.i860
+ br label %exit
+
+if.else227:
+ %cmp236 = icmp ult i16 %0, %conv.i860
+ br label %exit
+
+exit:
+ %retval = phi i1 [ %cmp235, %if.then223 ], [ %cmp236, %if.else227 ]
+ ret i1 %retval
+}
+
+
declare i32 @assert(...)
declare i8 @dummy_i8(i8)
declare i8 @dummy2(i8*, i8, i8)
@@ -191,3 +215,4 @@ declare fastcc signext i16 @safe_sub_fun
declare dso_local fastcc i64 @safe_sub_func_int64_t_s_s(i64, i64)
declare dso_local fastcc zeroext i8 @safe_lshift_func(i8 zeroext, i32)
declare dso_local fastcc zeroext i8 @safe_mul_func_uint8_t_u_u(i8 returned zeroext)
+declare i1 @i1_zeroext(i8*, i32, i16 zeroext)
Modified: llvm/trunk/test/CodeGen/ARM/CGP/arm-cgp-casts.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/CGP/arm-cgp-casts.ll?rev=346499&r1=346498&r2=346499&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/CGP/arm-cgp-casts.ll (original)
+++ llvm/trunk/test/CodeGen/ARM/CGP/arm-cgp-casts.ll Fri Nov 9 07:06:33 2018
@@ -582,3 +582,22 @@ if.end:
%retval = phi i8 [ 0, %entry ], [ %add, %if.then ]
ret i8 %retval
}
+
+define i32 @bitcast_i1(i16 zeroext %a, i32 %b, i32 %c) {
+entry:
+ %0 = bitcast i1 1 to i1
+ %1 = trunc i16 %a to i1
+ %cmp = icmp eq i1 %1, %0
+ br i1 %cmp, label %if.then, label %exit
+
+if.then:
+ %conv = zext i1 %0 to i16
+ %conv1 = zext i1 %1 to i16
+ %cmp1 = icmp uge i16 %conv, %conv1
+ %select = select i1 %cmp1, i32 %b, i32 %c
+ br label %exit
+
+exit:
+ %retval = phi i32 [ %select, %if.then ], [ 0, %entry ]
+ ret i32 %retval
+}
More information about the llvm-commits
mailing list