1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[mips] Replace assert by an error message

Initially, if the `c` constraint applied to the wrong data type that
causes LLVM to assert. This commit replaces the assert by an error
message.

llvm-svn: 321565
This commit is contained in:
Simon Atanasyan 2017-12-29 19:18:24 +00:00
parent 4f8f93ccba
commit 89abb5ee87
3 changed files with 39 additions and 2 deletions

View File

@ -3863,8 +3863,10 @@ MipsTargetLowering::getRegForInlineAsmConstraint(const TargetRegisterInfo *TRI,
case 'c': // register suitable for indirect jump
if (VT == MVT::i32)
return std::make_pair((unsigned)Mips::T9, &Mips::GPR32RegClass);
assert(VT == MVT::i64 && "Unexpected type.");
return std::make_pair((unsigned)Mips::T9_64, &Mips::GPR64RegClass);
if (VT == MVT::i64)
return std::make_pair((unsigned)Mips::T9_64, &Mips::GPR64RegClass);
// This will generate an error message
return std::make_pair(0U, nullptr);
case 'l': // register suitable for indirect jump
if (VT == MVT::i32)
return std::make_pair((unsigned)Mips::LO0, &Mips::LO32RegClass);

View File

@ -0,0 +1,17 @@
; Check that invalid type for constraint `c` causes an error message.
; RUN: not llc -march=mips -target-abi o32 < %s 2>&1 | FileCheck %s
define i32 @main() #0 {
entry:
%jmp = alloca float, align 4
store float 0x4200000000000000, float* %jmp, align 4
%0 = load float, float* %jmp, align 4
call void asm sideeffect "jr $0", "c,~{$1}"(float %0) #1
; CHECK: error: couldn't allocate input reg for constraint 'c'
ret i32 0
}
attributes #0 = { noinline nounwind }
attributes #1 = { nounwind }

View File

@ -0,0 +1,18 @@
; Check handling of the constraint `c`.
; RUN: llc -march=mips -target-abi o32 < %s | FileCheck %s
define i32 @main() #0 {
entry:
%jmp = alloca i32, align 4
store i32 0, i32* %jmp, align 4
%0 = load i32, i32* %jmp, align 4
call void asm sideeffect "jr $0", "c,~{$1}"(i32 %0) #1
; CHECK: addiu $25, $zero, 0
; CHECK: jr $25
ret i32 0
}
attributes #0 = { noinline nounwind }
attributes #1 = { nounwind }