diff --git a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp --- a/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp +++ b/llvm/lib/Target/MSP430/MSP430ISelLowering.cpp @@ -571,6 +571,7 @@ switch (CallConv) { default: report_fatal_error("Unsupported calling convention"); + case CallingConv::MSP430_BUILTIN: case CallingConv::C: case CallingConv::Fast: return LowerCCCArguments(Chain, CallConv, isVarArg, Ins, dl, DAG, InVals); diff --git a/llvm/test/CodeGen/MSP430/cc_args.ll b/llvm/test/CodeGen/MSP430/cc_args.ll --- a/llvm/test/CodeGen/MSP430/cc_args.ll +++ b/llvm/test/CodeGen/MSP430/cc_args.ll @@ -215,4 +215,24 @@ ret i64 %3 } +define cc94 i64 @helper_i64(i64 %a, i64 %b) { +; CHECK-LABEL: helper_i64: +; CHECK: mov r15, &g_i64_2+6 +; CHECK-NEXT: mov r14, &g_i64_2+4 +; CHECK-NEXT: mov r13, &g_i64_2+2 +; CHECK-NEXT: mov r12, &g_i64_2 +; CHECK-NEXT: mov r11, &g_i64+6 +; CHECK-NEXT: mov r10, &g_i64+4 +; CHECK-NEXT: mov r9, &g_i64+2 +; CHECK-NEXT: mov r8, &g_i64 +; CHECK-NEXT: mov #30600, r12 +; CHECK-NEXT: mov #21862, r13 +; CHECK-NEXT: mov #13124, r14 +; CHECK-NEXT: mov #4386, r15 +; CHECK-NEXT: ret + store i64 %a, i64* @g_i64, align 2 + store i64 %b, i64* @g_i64_2, align 2 + ret i64 1234605616436508552 +} + attributes #0 = { nounwind "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }