| Index: src/IceTargetLoweringARM32.cpp
|
| diff --git a/src/IceTargetLoweringARM32.cpp b/src/IceTargetLoweringARM32.cpp
|
| index 6ca28ed04449dddbdef8e7082b53c559d8a8008c..5d227fae121cd9dc489c6b114228285d689c255e 100644
|
| --- a/src/IceTargetLoweringARM32.cpp
|
| +++ b/src/IceTargetLoweringARM32.cpp
|
| @@ -2787,11 +2787,7 @@ void TargetARM32::lowerArithmetic(const InstArithmetic *Instr) {
|
| }
|
|
|
| if (isVectorType(DestTy)) {
|
| - // Add a fake def to keep liveness consistent in the meantime.
|
| - Variable *T = makeReg(DestTy);
|
| - Context.insert<InstFakeDef>(T);
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Instr);
|
| return;
|
| }
|
|
|
| @@ -3496,10 +3492,7 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
|
| return;
|
| case InstCast::Sext: {
|
| if (isVectorType(Dest->getType())) {
|
| - Variable *T = makeReg(Dest->getType());
|
| - Context.insert<InstFakeDef>(T, legalizeToReg(Src0));
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| } else if (Dest->getType() == IceType_i64) {
|
| // t1=sxtb src; t2= mov t1 asr #31; dst.lo=t1; dst.hi=t2
|
| Constant *ShiftAmt = Ctx->getConstantInt32(31);
|
| @@ -3544,10 +3537,7 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
|
| }
|
| case InstCast::Zext: {
|
| if (isVectorType(Dest->getType())) {
|
| - Variable *T = makeReg(Dest->getType());
|
| - Context.insert<InstFakeDef>(T, legalizeToReg(Src0));
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| } else if (Dest->getType() == IceType_i64) {
|
| // t1=uxtb src; dst.lo=t1; dst.hi=0
|
| Operand *_0 =
|
| @@ -3600,10 +3590,7 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
|
| }
|
| case InstCast::Trunc: {
|
| if (isVectorType(Dest->getType())) {
|
| - Variable *T = makeReg(Dest->getType());
|
| - Context.insert<InstFakeDef>(T, legalizeToReg(Src0));
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| } else {
|
| if (Src0->getType() == IceType_i64)
|
| Src0 = loOperand(Src0);
|
| @@ -3623,10 +3610,7 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
|
| // fpext: dest.f64 = fptrunc src0.fp32
|
| const bool IsTrunc = CastKind == InstCast::Fptrunc;
|
| if (isVectorType(Dest->getType())) {
|
| - Variable *T = makeReg(Dest->getType());
|
| - Context.insert<InstFakeDef>(T, legalizeToReg(Src0));
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| break;
|
| }
|
| assert(Dest->getType() == (IsTrunc ? IceType_f32 : IceType_f64));
|
| @@ -3640,10 +3624,7 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
|
| case InstCast::Fptosi:
|
| case InstCast::Fptoui: {
|
| if (isVectorType(Dest->getType())) {
|
| - Variable *T = makeReg(Dest->getType());
|
| - Context.insert<InstFakeDef>(T, legalizeToReg(Src0));
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| break;
|
| }
|
|
|
| @@ -3679,10 +3660,7 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
|
| case InstCast::Sitofp:
|
| case InstCast::Uitofp: {
|
| if (isVectorType(Dest->getType())) {
|
| - Variable *T = makeReg(Dest->getType());
|
| - Context.insert<InstFakeDef>(T, legalizeToReg(Src0));
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| break;
|
| }
|
| const bool SourceIsSigned = CastKind == InstCast::Sitofp;
|
| @@ -3731,13 +3709,13 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
|
| case IceType_void:
|
| llvm::report_fatal_error("Unexpected bitcast.");
|
| case IceType_i1:
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| break;
|
| case IceType_i8:
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| break;
|
| case IceType_i16:
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| break;
|
| case IceType_i32:
|
| case IceType_f32: {
|
| @@ -3784,11 +3762,7 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
|
| case IceType_v16i8:
|
| case IceType_v4f32:
|
| case IceType_v4i32: {
|
| - // avoid liveness errors
|
| - Variable *T = makeReg(DestType);
|
| - Context.insert<InstFakeDef>(T, legalizeToReg(Src0));
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| break;
|
| }
|
| }
|
| @@ -3798,12 +3772,7 @@ void TargetARM32::lowerCast(const InstCast *Inst) {
|
| }
|
|
|
| void TargetARM32::lowerExtractElement(const InstExtractElement *Inst) {
|
| - Variable *Dest = Inst->getDest();
|
| - Type DestType = Dest->getType();
|
| - Variable *T = makeReg(DestType);
|
| - Context.insert<InstFakeDef>(T);
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| }
|
|
|
| namespace {
|
| @@ -3882,10 +3851,7 @@ TargetARM32::CondWhenTrue TargetARM32::lowerFcmpCond(const InstFcmp *Instr) {
|
| void TargetARM32::lowerFcmp(const InstFcmp *Instr) {
|
| Variable *Dest = Instr->getDest();
|
| if (isVectorType(Dest->getType())) {
|
| - Variable *T = makeReg(Dest->getType());
|
| - Context.insert<InstFakeDef>(T);
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Instr);
|
| return;
|
| }
|
|
|
| @@ -4181,10 +4147,7 @@ void TargetARM32::lowerIcmp(const InstIcmp *Inst) {
|
| Variable *Dest = Inst->getDest();
|
|
|
| if (isVectorType(Dest->getType())) {
|
| - Variable *T = makeReg(Dest->getType());
|
| - Context.insert<InstFakeDef>(T);
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| return;
|
| }
|
|
|
| @@ -4204,8 +4167,7 @@ void TargetARM32::lowerIcmp(const InstIcmp *Inst) {
|
| }
|
|
|
| void TargetARM32::lowerInsertElement(const InstInsertElement *Inst) {
|
| - (void)Inst;
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| }
|
|
|
| namespace {
|
| @@ -4749,10 +4711,7 @@ void TargetARM32::lowerIntrinsicCall(const InstIntrinsicCall *Instr) {
|
| Type DestTy = Dest->getType();
|
| Variable *T = makeReg(DestTy);
|
| if (isVectorType(DestTy)) {
|
| - // Add a fake def to keep liveness consistent in the meantime.
|
| - Context.insert<InstFakeDef>(T);
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Instr);
|
| return;
|
| }
|
| _vabs(T, legalizeToReg(Instr->getArg(0)));
|
| @@ -5343,10 +5302,7 @@ void TargetARM32::lowerSelect(const InstSelect *Inst) {
|
| Operand *Condition = Inst->getCondition();
|
|
|
| if (isVectorType(DestTy)) {
|
| - Variable *T = makeReg(DestTy);
|
| - Context.insert<InstFakeDef>(T);
|
| - _mov(Dest, T);
|
| - UnimplementedError(Func->getContext()->getFlags());
|
| + UnimplementedLoweringError(this, Inst);
|
| return;
|
| }
|
|
|
|
|