diff options
-rw-r--r-- | lib/Basic/Targets.cpp | 12 | ||||
-rw-r--r-- | test/CodeGen/builtins-arm.c | 7 | ||||
-rw-r--r-- | test/CodeGen/builtins-mips.c | 7 |
3 files changed, 26 insertions, 0 deletions
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index eaf2e7d05e..ec57ca3609 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -3721,6 +3721,12 @@ public: virtual CallingConvCheckResult checkCallingConvention(CallingConv CC) const { return (CC == CC_AAPCS || CC == CC_AAPCS_VFP) ? CCCR_OK : CCCR_Warning; } + + virtual int getEHDataRegisterNumber(unsigned RegNo) const { + if (RegNo == 0) return 0; + if (RegNo == 1) return 1; + return -1; + } }; const char * const ARMTargetInfo::GCCRegNames[] = { @@ -4434,6 +4440,12 @@ public: if (it != Features.end()) Features.erase(it); } + + virtual int getEHDataRegisterNumber(unsigned RegNo) const { + if (RegNo == 0) return 4; + if (RegNo == 1) return 5; + return -1; + } }; const Builtin::Info MipsTargetInfoBase::BuiltinInfo[] = { diff --git a/test/CodeGen/builtins-arm.c b/test/CodeGen/builtins-arm.c index 3611650c38..e6c7cede1f 100644 --- a/test/CodeGen/builtins-arm.c +++ b/test/CodeGen/builtins-arm.c @@ -11,3 +11,10 @@ void f1(char *a, char *b) { } // CHECK: call {{.*}} @__clear_cache + +void test_eh_return_data_regno() +{ + volatile int res; + res = __builtin_eh_return_data_regno(0); // CHECK: store volatile i32 0 + res = __builtin_eh_return_data_regno(1); // CHECK: store volatile i32 1 +} diff --git a/test/CodeGen/builtins-mips.c b/test/CodeGen/builtins-mips.c index ef4662cd59..c6be896e81 100644 --- a/test/CodeGen/builtins-mips.c +++ b/test/CodeGen/builtins-mips.c @@ -532,3 +532,10 @@ void foo() { v4i8_r = __builtin_mips_subuh_r_qb(v4i8_a, v4i8_b); // CHECK: call <4 x i8> @llvm.mips.subuh.r.qb } + +void test_eh_return_data_regno() +{ + volatile int res; + res = __builtin_eh_return_data_regno(0); // CHECK: store volatile i32 4 + res = __builtin_eh_return_data_regno(1); // CHECK: store volatile i32 5 +} |