Index: src/IceTargetLoweringMIPS32.cpp |
diff --git a/src/IceTargetLoweringMIPS32.cpp b/src/IceTargetLoweringMIPS32.cpp |
index 6d6c6b9316f43f8e48f4e759d7493ea7a7eea595..05dfe3c0aef567d71e48fca6d444d677f5ed8d67 100644 |
--- a/src/IceTargetLoweringMIPS32.cpp |
+++ b/src/IceTargetLoweringMIPS32.cpp |
@@ -1839,15 +1839,6 @@ void TargetMIPS32::lowerArithmetic(const InstArithmetic *Instr) { |
UnimplementedLoweringError(this, Instr); |
return; |
} |
- switch (Instr->getOp()) { |
- default: |
- break; |
- case InstArithmetic::Frem: |
- UnimplementedLoweringError(this, Instr); |
- return; |
- } |
- |
- // At this point Dest->getType() is non-i64 scalar |
Variable *T = makeReg(Dest->getType()); |
Variable *Src0R = legalizeToReg(Src0); |
@@ -1979,6 +1970,7 @@ void TargetMIPS32::lowerArithmetic(const InstArithmetic *Instr) { |
} |
break; |
case InstArithmetic::Frem: |
+ llvm::report_fatal_error("frem should have been prelowered."); |
break; |
} |
UnimplementedLoweringError(this, Instr); |
@@ -2415,6 +2407,10 @@ void TargetMIPS32::lowerCast(const InstCast *Instr) { |
break; |
} |
case InstCast::Fptosi: { |
+ if (llvm::isa<Variable64On32>(Dest)) { |
+ llvm::report_fatal_error("fp-to-i64 should have been prelowered."); |
+ return; |
+ } |
if (Src0Ty == IceType_f32 && DestTy == IceType_i32) { |
Variable *Src0R = legalizeToReg(Src0); |
Variable *FTmp = makeReg(IceType_f32); |
@@ -2426,9 +2422,17 @@ void TargetMIPS32::lowerCast(const InstCast *Instr) { |
break; |
} |
case InstCast::Fptoui: |
+ if (llvm::isa<Variable64On32>(Dest)) { |
+ llvm::report_fatal_error("fp-to-i64 should have been prelowered."); |
+ return; |
+ } |
UnimplementedLoweringError(this, Instr); |
break; |
case InstCast::Sitofp: { |
+ if (llvm::isa<Variable64On32>(Dest)) { |
+ llvm::report_fatal_error("i64-to-fp should have been prelowered."); |
+ return; |
+ } |
if (Src0Ty == IceType_i32 && DestTy == IceType_f32) { |
Variable *Src0R = legalizeToReg(Src0); |
Variable *FTmp1 = makeReg(IceType_f32); |
@@ -2442,11 +2446,44 @@ void TargetMIPS32::lowerCast(const InstCast *Instr) { |
break; |
} |
case InstCast::Uitofp: { |
+ if (llvm::isa<Variable64On32>(Dest)) { |
+ llvm::report_fatal_error("i64-to-fp should have been prelowered."); |
+ return; |
+ } |
UnimplementedLoweringError(this, Instr); |
break; |
} |
case InstCast::Bitcast: { |
- UnimplementedLoweringError(this, Instr); |
+ switch (DestTy) { |
+ case IceType_NUM: |
+ case IceType_void: |
+ llvm::report_fatal_error("Unexpected bitcast."); |
+ case IceType_i1: |
+ UnimplementedLoweringError(this, Instr); |
+ break; |
+ case IceType_i8: |
+ assert(Src0->getType() == IceType_v8i1); |
+ llvm::report_fatal_error( |
+ "i8 to v8i1 conversion should have been prelowered."); |
+ break; |
+ case IceType_i16: |
+ assert(Src0->getType() == IceType_v16i1); |
+ llvm::report_fatal_error( |
+ "i16 to v16i1 conversion should have been prelowered."); |
+ break; |
+ case IceType_v8i1: |
+ assert(Src0->getType() == IceType_i8); |
+ llvm::report_fatal_error( |
+ "v8i1 to i8 conversion should have been prelowered."); |
+ break; |
+ case IceType_v16i1: |
+ assert(Src0->getType() == IceType_i16); |
+ llvm::report_fatal_error( |
+ "v16i1 to i16 conversion should have been prelowered."); |
+ break; |
+ default: |
+ UnimplementedLoweringError(this, Instr); |
+ } |
break; |
} |
} |
@@ -2805,7 +2842,7 @@ void TargetMIPS32::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { |
return; |
} |
case Intrinsics::Ctpop: { |
- UnimplementedLoweringError(this, Instr); |
+ llvm::report_fatal_error("Ctpop should have been prelowered."); |
return; |
} |
case Intrinsics::Ctlz: { |
@@ -2829,42 +2866,19 @@ void TargetMIPS32::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { |
return; |
} |
case Intrinsics::Longjmp: { |
- InstCall *Call = makeHelperCall(RuntimeHelper::H_call_longjmp, nullptr, 2); |
- Call->addArg(Instr->getArg(0)); |
- Call->addArg(Instr->getArg(1)); |
- lowerCall(Call); |
+ llvm::report_fatal_error("longjmp should have been prelowered."); |
return; |
} |
case Intrinsics::Memcpy: { |
- // In the future, we could potentially emit an inline memcpy/memset, etc. |
- // for intrinsic calls w/ a known length. |
- InstCall *Call = makeHelperCall(RuntimeHelper::H_call_memcpy, nullptr, 3); |
- Call->addArg(Instr->getArg(0)); |
- Call->addArg(Instr->getArg(1)); |
- Call->addArg(Instr->getArg(2)); |
- lowerCall(Call); |
+ llvm::report_fatal_error("memcpy should have been prelowered."); |
return; |
} |
case Intrinsics::Memmove: { |
- InstCall *Call = makeHelperCall(RuntimeHelper::H_call_memmove, nullptr, 3); |
- Call->addArg(Instr->getArg(0)); |
- Call->addArg(Instr->getArg(1)); |
- Call->addArg(Instr->getArg(2)); |
- lowerCall(Call); |
+ llvm::report_fatal_error("memmove should have been prelowered."); |
return; |
} |
case Intrinsics::Memset: { |
- // The value operand needs to be extended to a stack slot size because the |
- // PNaCl ABI requires arguments to be at least 32 bits wide. |
- Operand *ValOp = Instr->getArg(1); |
- assert(ValOp->getType() == IceType_i8); |
- Variable *ValExt = Func->makeVariable(stackSlotType()); |
- lowerCast(InstCast::create(Func, InstCast::Zext, ValExt, ValOp)); |
- InstCall *Call = makeHelperCall(RuntimeHelper::H_call_memset, nullptr, 3); |
- Call->addArg(Instr->getArg(0)); |
- Call->addArg(ValExt); |
- Call->addArg(Instr->getArg(2)); |
- lowerCall(Call); |
+ llvm::report_fatal_error("memset should have been prelowered."); |
return; |
} |
case Intrinsics::NaClReadTP: { |
@@ -2878,10 +2892,7 @@ void TargetMIPS32::lowerIntrinsicCall(const InstIntrinsicCall *Instr) { |
return; |
} |
case Intrinsics::Setjmp: { |
- InstCall *Call = |
- makeHelperCall(RuntimeHelper::H_call_setjmp, Instr->getDest(), 1); |
- Call->addArg(Instr->getArg(0)); |
- lowerCall(Call); |
+ llvm::report_fatal_error("setjmp should have been prelowered."); |
return; |
} |
case Intrinsics::Sqrt: { |