[llvm-branch-commits] [llvm] RuntimeLibcalls: Really move default libcall handling to tablegen (PR #148780)

Matt Arsenault via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sat Aug 2 17:41:43 PDT 2025


https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/148780

>From a8d3505cf190e60ffba12580456a785a9c313063 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Mon, 14 Jul 2025 19:53:22 +0900
Subject: [PATCH] RuntimeLibcalls: Really move default libcall handling to
 tablegen

Hack in the default setting so it's consistently generated like
the other cases. Maintain a list of targets where this applies.
The alternative would require new infrastructure to sort the system
library initialization in some way.

I wanted the unhandled target case to be treated as a fatal
error, but it turns out there's a hack in IRSymtab using
RuntimeLibcalls, which will fail out in many tests that
do not have a triple set. Many of the failures are simply
running llvm-as with no triple, which probably should not
depend on knowing an accurate set of calls.
---
 llvm/include/llvm/IR/RuntimeLibcalls.h        |    5 -
 llvm/include/llvm/IR/RuntimeLibcalls.td       |   36 +-
 llvm/lib/IR/RuntimeLibcalls.cpp               |   42 +-
 llvm/test/CodeGen/AVR/llvm.sincos.ll          | 1183 +++++------------
 llvm/test/TableGen/RuntimeLibcallEmitter.td   |   14 +-
 .../TableGen/Basic/RuntimeLibcallsEmitter.cpp |   35 +-
 6 files changed, 398 insertions(+), 917 deletions(-)

diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.h b/llvm/include/llvm/IR/RuntimeLibcalls.h
index eb882c48270cf..f39e2e3c26900 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.h
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.h
@@ -137,9 +137,6 @@ struct RuntimeLibcallsInfo {
   LLVM_ABI RTLIB::LibcallImpl getSupportedLibcallImpl(StringRef FuncName) const;
 
 private:
-  static const RTLIB::LibcallImpl
-      DefaultLibcallImpls[RTLIB::UNKNOWN_LIBCALL + 1];
-
   /// Stores the implementation choice for each each libcall.
   RTLIB::LibcallImpl LibcallImpls[RTLIB::UNKNOWN_LIBCALL + 1] = {
       RTLIB::Unsupported};
@@ -197,8 +194,6 @@ struct RuntimeLibcallsInfo {
     return hasSinCos(TT) || TT.isPS();
   }
 
-  LLVM_ABI void initDefaultLibCallImpls();
-
   /// Generated by tablegen.
   void setTargetRuntimeLibcallSets(const Triple &TT,
                                    FloatABI::ABIType FloatABI);
diff --git a/llvm/include/llvm/IR/RuntimeLibcalls.td b/llvm/include/llvm/IR/RuntimeLibcalls.td
index bae0020e0aead..f8782d71ddf37 100644
--- a/llvm/include/llvm/IR/RuntimeLibcalls.td
+++ b/llvm/include/llvm/IR/RuntimeLibcalls.td
@@ -1610,7 +1610,9 @@ def HexagonSystemLibrary
     (add (sub DefaultLibcallImpls32,
     __adddf3, __divsf3, __udivsi3, __udivdi3,
     __umoddi3, __divdf3, __muldf3, __divsi3, __subdf3, sqrtf,
-    __divdi3, __umodsi3, __moddi3, __modsi3), HexagonLibcalls)>;
+    __divdi3, __umodsi3, __moddi3, __modsi3), HexagonLibcalls,
+    LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
+    exp10f, exp10, exp10l_f128)>;
 
 //===----------------------------------------------------------------------===//
 // Lanai Runtime Libcalls
@@ -1823,6 +1825,7 @@ defvar MSP430DefaultOptOut = [
 def MSP430SystemLibrary
     : SystemRuntimeLibrary<isMSP430,
     (add (sub DefaultRuntimeLibcallImpls, MSP430DefaultOptOut),
+      exp10f, exp10, exp10l_f128,
 
       // Floating point conversions - EABI Table 6
       __mspabi_cvtdf,
@@ -2168,8 +2171,12 @@ def __memcpy_4 : RuntimeLibcallImpl<MEMCPY_ALIGN_4>;
 
 def isXCore : RuntimeLibcallPredicate<"TT.getArch() == Triple::xcore">;
 def XCoreSystemLibrary
-    : SystemRuntimeLibrary<isXCore, (add DefaultRuntimeLibcallImpls,
-                                        __memcpy_4)>;
+    : SystemRuntimeLibrary<isXCore,
+    (add DefaultRuntimeLibcallImpls,
+         exp10f, exp10, exp10l_f128,
+         __memcpy_4,
+         LibcallImpls<(add LibmF128Libcalls, LibmF128FiniteLibcalls), isGNUEnvironment>
+)>;
 
 //===----------------------------------------------------------------------===//
 // ZOS Runtime Libcalls
@@ -2286,3 +2293,26 @@ def WasmSystemLibrary
            CompilerRTOnlyInt64Libcalls, CompilerRTOnlyInt128Libcalls,
            exp10f, exp10,
            emscripten_return_address)>;
+
+//===----------------------------------------------------------------------===//
+// Legacy Default Runtime Libcalls
+//===----------------------------------------------------------------------===//
+
+// TODO: Should make every target explicit.
+def isDefaultLibcallArch : RuntimeLibcallPredicate<[{
+  TT.isMIPS() || TT.isLoongArch() || TT.isVE() || TT.isBPF() ||
+  TT.getArch() == Triple::csky || TT.getArch() == Triple::arc ||
+  TT.getArch() == Triple::m68k ||  TT.getArch() == Triple::xtensa ||
+  (TT.isSystemZ() && !TT.isOSzOS())
+}]>;
+
+
+def isArch64Bit : RuntimeLibcallPredicate<[{TT.isArch64Bit()}]>;
+def LegacyDefaultSystemLibrary
+    : SystemRuntimeLibrary<isDefaultLibcallArch,
+      (add DefaultRuntimeLibcallImpls,
+         LibmHasSinCosF32, LibmHasSinCosF64, LibmHasSinCosF128,
+         exp10f, exp10, exp10l_f128,
+         __powisf2, __powidf2, __powitf2_f128,
+         LibcallImpls<(add Int128RTLibcalls), isArch64Bit>
+)>;
diff --git a/llvm/lib/IR/RuntimeLibcalls.cpp b/llvm/lib/IR/RuntimeLibcalls.cpp
index 1ca5878787979..8c90c52141dc7 100644
--- a/llvm/lib/IR/RuntimeLibcalls.cpp
+++ b/llvm/lib/IR/RuntimeLibcalls.cpp
@@ -8,6 +8,9 @@
 
 #include "llvm/IR/RuntimeLibcalls.h"
 #include "llvm/ADT/StringTable.h"
+#include "llvm/Support/Debug.h"
+
+#define DEBUG_TYPE "runtime-libcalls-info"
 
 using namespace llvm;
 using namespace RTLIB;
@@ -62,12 +65,6 @@ static void setARMLibcallNames(RuntimeLibcallsInfo &Info, const Triple &TT,
     Info.setLibcallImplCallingConv(Impl, CallingConv::ARM_AAPCS);
 }
 
-void RTLIB::RuntimeLibcallsInfo::initDefaultLibCallImpls() {
-  std::memcpy(LibcallImpls, DefaultLibcallImpls, sizeof(LibcallImpls));
-  static_assert(sizeof(LibcallImpls) == sizeof(DefaultLibcallImpls),
-                "libcall array size should match");
-}
-
 /// Set default libcall names. If a target wants to opt-out of a libcall it
 /// should be placed here.
 void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
@@ -76,10 +73,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
                                        EABI EABIVersion, StringRef ABIName) {
   setTargetRuntimeLibcallSets(TT, FloatABI);
 
-  // Early exit for targets that have fully ported to tablegen.
-  if (TT.isAMDGPU() || TT.isNVPTX() || TT.isWasm())
-    return;
-
   if (TT.isX86() || TT.isVE() || TT.isARM() || TT.isThumb()) {
     if (ExceptionModel == ExceptionHandling::SjLj)
       setLibcallImpl(RTLIB::UNWIND_RESUME, RTLIB::_Unwind_SjLj_Resume);
@@ -92,11 +85,6 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
     // FIXME: What about other targets?
     setLibcallImpl(RTLIB::FPEXT_F16_F32, RTLIB::__extendhfsf2);
     setLibcallImpl(RTLIB::FPROUND_F32_F16, RTLIB::__truncsfhf2);
-
-    if (!darwinHasExp10(TT)) {
-      setLibcallImpl(RTLIB::EXP10_F32, RTLIB::Unsupported);
-      setLibcallImpl(RTLIB::EXP10_F64, RTLIB::Unsupported);
-    }
   }
 
   if (TT.isOSOpenBSD()) {
@@ -104,35 +92,11 @@ void RuntimeLibcallsInfo::initLibcalls(const Triple &TT,
     setLibcallImpl(RTLIB::STACK_SMASH_HANDLER, RTLIB::__stack_smash_handler);
   }
 
-  // Skip default manual processing for targets that have been mostly ported to
-  // tablegen for now. Eventually the rest of this should be deleted.
-  if (TT.isX86() || TT.isAArch64() || TT.isWasm() || TT.isPPC())
-    return;
-
   if (TT.isARM() || TT.isThumb()) {
     setARMLibcallNames(*this, TT, FloatABI, EABIVersion);
     return;
   }
 
-  if (hasSinCos(TT)) {
-    setLibcallImpl(RTLIB::SINCOS_F32, RTLIB::sincosf);
-    setLibcallImpl(RTLIB::SINCOS_F64, RTLIB::sincos);
-    setLibcallImpl(RTLIB::SINCOS_F128, RTLIB::sincos_f128);
-  }
-
-  setLibcallImpl(RTLIB::EXP10_F32, RTLIB::exp10f);
-  setLibcallImpl(RTLIB::EXP10_F64, RTLIB::exp10);
-  setLibcallImpl(RTLIB::EXP10_F128, RTLIB::exp10l_f128);
-
-  // These libcalls are only available in compiler-rt, not libgcc.
-  if (TT.isArch64Bit()) {
-    setLibcallImpl(RTLIB::SHL_I128, RTLIB::__ashlti3);
-    setLibcallImpl(RTLIB::SRL_I128, RTLIB::__lshrti3);
-    setLibcallImpl(RTLIB::SRA_I128, RTLIB::__ashrti3);
-    setLibcallImpl(RTLIB::MUL_I128, RTLIB::__multi3);
-    setLibcallImpl(RTLIB::MULO_I64, RTLIB::__mulodi4);
-  }
-
   if (TT.getArch() == Triple::ArchType::msp430) {
     setLibcallImplCallingConv(RTLIB::__mspabi_mpyll,
                               CallingConv::MSP430_BUILTIN);
diff --git a/llvm/test/CodeGen/AVR/llvm.sincos.ll b/llvm/test/CodeGen/AVR/llvm.sincos.ll
index 897101d30430d..b70b8d34a8a3b 100644
--- a/llvm/test/CodeGen/AVR/llvm.sincos.ll
+++ b/llvm/test/CodeGen/AVR/llvm.sincos.ll
@@ -3,630 +3,266 @@
 ; RUN: llc -mtriple=avr-unknown-linux-gnu < %s | FileCheck -check-prefixes=CHECK,GNU %s
 
 define { half, half } @test_sincos_f16(half %a) #0 {
-; NONGNU-LABEL: test_sincos_f16:
-; NONGNU:       ; %bb.0:
-; NONGNU-NEXT:    push r12
-; NONGNU-NEXT:    push r13
-; NONGNU-NEXT:    push r14
-; NONGNU-NEXT:    push r15
-; NONGNU-NEXT:    push r16
-; NONGNU-NEXT:    push r17
-; NONGNU-NEXT:    mov r24, r22
-; NONGNU-NEXT:    mov r25, r23
-; NONGNU-NEXT:    rcall __extendhfsf2
-; NONGNU-NEXT:    mov r16, r22
-; NONGNU-NEXT:    mov r17, r23
-; NONGNU-NEXT:    mov r14, r24
-; NONGNU-NEXT:    mov r15, r25
-; NONGNU-NEXT:    rcall sin
-; NONGNU-NEXT:    rcall __truncsfhf2
-; NONGNU-NEXT:    mov r12, r24
-; NONGNU-NEXT:    mov r13, r25
-; NONGNU-NEXT:    mov r22, r16
-; NONGNU-NEXT:    mov r23, r17
-; NONGNU-NEXT:    mov r24, r14
-; NONGNU-NEXT:    mov r25, r15
-; NONGNU-NEXT:    rcall cos
-; NONGNU-NEXT:    rcall __truncsfhf2
-; NONGNU-NEXT:    mov r22, r24
-; NONGNU-NEXT:    mov r23, r25
-; NONGNU-NEXT:    mov r18, r12
-; NONGNU-NEXT:    mov r19, r13
-; NONGNU-NEXT:    pop r17
-; NONGNU-NEXT:    pop r16
-; NONGNU-NEXT:    pop r15
-; NONGNU-NEXT:    pop r14
-; NONGNU-NEXT:    pop r13
-; NONGNU-NEXT:    pop r12
-; NONGNU-NEXT:    ret
-;
-; GNU-LABEL: test_sincos_f16:
-; GNU:       ; %bb.0:
-; GNU-NEXT:    push r16
-; GNU-NEXT:    push r17
-; GNU-NEXT:    push r28
-; GNU-NEXT:    push r29
-; GNU-NEXT:    in r28, 61
-; GNU-NEXT:    in r29, 62
-; GNU-NEXT:    sbiw r28, 8
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    mov r24, r22
-; GNU-NEXT:    mov r25, r23
-; GNU-NEXT:    rcall __extendhfsf2
-; GNU-NEXT:    mov r20, r28
-; GNU-NEXT:    mov r21, r29
-; GNU-NEXT:    subi r20, 251
-; GNU-NEXT:    sbci r21, 255
-; GNU-NEXT:    mov r18, r28
-; GNU-NEXT:    mov r19, r29
-; GNU-NEXT:    subi r18, 255
-; GNU-NEXT:    sbci r19, 255
-; GNU-NEXT:    rcall sincosf
-; GNU-NEXT:    ldd r22, Y+5
-; GNU-NEXT:    ldd r23, Y+6
-; GNU-NEXT:    ldd r24, Y+7
-; GNU-NEXT:    ldd r25, Y+8
-; GNU-NEXT:    rcall __truncsfhf2
-; GNU-NEXT:    mov r16, r24
-; GNU-NEXT:    mov r17, r25
-; GNU-NEXT:    ldd r22, Y+1
-; GNU-NEXT:    ldd r23, Y+2
-; GNU-NEXT:    ldd r24, Y+3
-; GNU-NEXT:    ldd r25, Y+4
-; GNU-NEXT:    rcall __truncsfhf2
-; GNU-NEXT:    mov r22, r24
-; GNU-NEXT:    mov r23, r25
-; GNU-NEXT:    mov r18, r16
-; GNU-NEXT:    mov r19, r17
-; GNU-NEXT:    adiw r28, 8
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    pop r29
-; GNU-NEXT:    pop r28
-; GNU-NEXT:    pop r17
-; GNU-NEXT:    pop r16
-; GNU-NEXT:    ret
+; CHECK-LABEL: test_sincos_f16:
+; CHECK:       ; %bb.0:
+; CHECK-NEXT:    push r12
+; CHECK-NEXT:    push r13
+; CHECK-NEXT:    push r14
+; CHECK-NEXT:    push r15
+; CHECK-NEXT:    push r16
+; CHECK-NEXT:    push r17
+; CHECK-NEXT:    mov r24, r22
+; CHECK-NEXT:    mov r25, r23
+; CHECK-NEXT:    rcall __extendhfsf2
+; CHECK-NEXT:    mov r16, r22
+; CHECK-NEXT:    mov r17, r23
+; CHECK-NEXT:    mov r14, r24
+; CHECK-NEXT:    mov r15, r25
+; CHECK-NEXT:    rcall sin
+; CHECK-NEXT:    rcall __truncsfhf2
+; CHECK-NEXT:    mov r12, r24
+; CHECK-NEXT:    mov r13, r25
+; CHECK-NEXT:    mov r22, r16
+; CHECK-NEXT:    mov r23, r17
+; CHECK-NEXT:    mov r24, r14
+; CHECK-NEXT:    mov r25, r15
+; CHECK-NEXT:    rcall cos
+; CHECK-NEXT:    rcall __truncsfhf2
+; CHECK-NEXT:    mov r22, r24
+; CHECK-NEXT:    mov r23, r25
+; CHECK-NEXT:    mov r18, r12
+; CHECK-NEXT:    mov r19, r13
+; CHECK-NEXT:    pop r17
+; CHECK-NEXT:    pop r16
+; CHECK-NEXT:    pop r15
+; CHECK-NEXT:    pop r14
+; CHECK-NEXT:    pop r13
+; CHECK-NEXT:    pop r12
+; CHECK-NEXT:    ret
   %result = call { half, half } @llvm.sincos.f16(half %a)
   ret { half, half } %result
 }
 
 define half @test_sincos_f16_only_use_sin(half %a) #0 {
-; NONGNU-LABEL: test_sincos_f16_only_use_sin:
-; NONGNU:       ; %bb.0:
-; NONGNU-NEXT:    mov r24, r22
-; NONGNU-NEXT:    mov r25, r23
-; NONGNU-NEXT:    rcall __extendhfsf2
-; NONGNU-NEXT:    rcall sin
-; NONGNU-NEXT:    rcall __truncsfhf2
-; NONGNU-NEXT:    mov r22, r24
-; NONGNU-NEXT:    mov r23, r25
-; NONGNU-NEXT:    ret
-;
-; GNU-LABEL: test_sincos_f16_only_use_sin:
-; GNU:       ; %bb.0:
-; GNU-NEXT:    push r28
-; GNU-NEXT:    push r29
-; GNU-NEXT:    in r28, 61
-; GNU-NEXT:    in r29, 62
-; GNU-NEXT:    sbiw r28, 8
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    mov r24, r22
-; GNU-NEXT:    mov r25, r23
-; GNU-NEXT:    rcall __extendhfsf2
-; GNU-NEXT:    mov r20, r28
-; GNU-NEXT:    mov r21, r29
-; GNU-NEXT:    subi r20, 251
-; GNU-NEXT:    sbci r21, 255
-; GNU-NEXT:    mov r18, r28
-; GNU-NEXT:    mov r19, r29
-; GNU-NEXT:    subi r18, 255
-; GNU-NEXT:    sbci r19, 255
-; GNU-NEXT:    rcall sincosf
-; GNU-NEXT:    ldd r22, Y+5
-; GNU-NEXT:    ldd r23, Y+6
-; GNU-NEXT:    ldd r24, Y+7
-; GNU-NEXT:    ldd r25, Y+8
-; GNU-NEXT:    rcall __truncsfhf2
-; GNU-NEXT:    mov r22, r24
-; GNU-NEXT:    mov r23, r25
-; GNU-NEXT:    adiw r28, 8
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    pop r29
-; GNU-NEXT:    pop r28
-; GNU-NEXT:    ret
+; CHECK-LABEL: test_sincos_f16_only_use_sin:
+; CHECK:       ; %bb.0:
+; CHECK-NEXT:    mov r24, r22
+; CHECK-NEXT:    mov r25, r23
+; CHECK-NEXT:    rcall __extendhfsf2
+; CHECK-NEXT:    rcall sin
+; CHECK-NEXT:    rcall __truncsfhf2
+; CHECK-NEXT:    mov r22, r24
+; CHECK-NEXT:    mov r23, r25
+; CHECK-NEXT:    ret
   %result = call { half, half } @llvm.sincos.f16(half %a)
   %result.0 = extractvalue { half, half } %result, 0
   ret half %result.0
 }
 
 define half @test_sincos_f16_only_use_cos(half %a) #0 {
-; NONGNU-LABEL: test_sincos_f16_only_use_cos:
-; NONGNU:       ; %bb.0:
-; NONGNU-NEXT:    mov r24, r22
-; NONGNU-NEXT:    mov r25, r23
-; NONGNU-NEXT:    rcall __extendhfsf2
-; NONGNU-NEXT:    rcall cos
-; NONGNU-NEXT:    rcall __truncsfhf2
-; NONGNU-NEXT:    mov r22, r24
-; NONGNU-NEXT:    mov r23, r25
-; NONGNU-NEXT:    ret
-;
-; GNU-LABEL: test_sincos_f16_only_use_cos:
-; GNU:       ; %bb.0:
-; GNU-NEXT:    push r28
-; GNU-NEXT:    push r29
-; GNU-NEXT:    in r28, 61
-; GNU-NEXT:    in r29, 62
-; GNU-NEXT:    sbiw r28, 8
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    mov r24, r22
-; GNU-NEXT:    mov r25, r23
-; GNU-NEXT:    rcall __extendhfsf2
-; GNU-NEXT:    mov r20, r28
-; GNU-NEXT:    mov r21, r29
-; GNU-NEXT:    subi r20, 251
-; GNU-NEXT:    sbci r21, 255
-; GNU-NEXT:    mov r18, r28
-; GNU-NEXT:    mov r19, r29
-; GNU-NEXT:    subi r18, 255
-; GNU-NEXT:    sbci r19, 255
-; GNU-NEXT:    rcall sincosf
-; GNU-NEXT:    ldd r22, Y+1
-; GNU-NEXT:    ldd r23, Y+2
-; GNU-NEXT:    ldd r24, Y+3
-; GNU-NEXT:    ldd r25, Y+4
-; GNU-NEXT:    rcall __truncsfhf2
-; GNU-NEXT:    mov r22, r24
-; GNU-NEXT:    mov r23, r25
-; GNU-NEXT:    adiw r28, 8
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    pop r29
-; GNU-NEXT:    pop r28
-; GNU-NEXT:    ret
+; CHECK-LABEL: test_sincos_f16_only_use_cos:
+; CHECK:       ; %bb.0:
+; CHECK-NEXT:    mov r24, r22
+; CHECK-NEXT:    mov r25, r23
+; CHECK-NEXT:    rcall __extendhfsf2
+; CHECK-NEXT:    rcall cos
+; CHECK-NEXT:    rcall __truncsfhf2
+; CHECK-NEXT:    mov r22, r24
+; CHECK-NEXT:    mov r23, r25
+; CHECK-NEXT:    ret
   %result = call { half, half } @llvm.sincos.f16(half %a)
   %result.1 = extractvalue { half, half } %result, 1
   ret half %result.1
 }
 
 define { <2 x half>, <2 x half> } @test_sincos_v2f16(<2 x half> %a) #0 {
-; NONGNU-LABEL: test_sincos_v2f16:
-; NONGNU:       ; %bb.0:
-; NONGNU-NEXT:    push r6
-; NONGNU-NEXT:    push r7
-; NONGNU-NEXT:    push r8
-; NONGNU-NEXT:    push r9
-; NONGNU-NEXT:    push r10
-; NONGNU-NEXT:    push r11
-; NONGNU-NEXT:    push r12
-; NONGNU-NEXT:    push r13
-; NONGNU-NEXT:    push r14
-; NONGNU-NEXT:    push r15
-; NONGNU-NEXT:    push r16
-; NONGNU-NEXT:    push r17
-; NONGNU-NEXT:    mov r10, r22
-; NONGNU-NEXT:    mov r11, r23
-; NONGNU-NEXT:    rcall __extendhfsf2
-; NONGNU-NEXT:    mov r16, r22
-; NONGNU-NEXT:    mov r17, r23
-; NONGNU-NEXT:    mov r14, r24
-; NONGNU-NEXT:    mov r15, r25
-; NONGNU-NEXT:    rcall sin
-; NONGNU-NEXT:    rcall __truncsfhf2
-; NONGNU-NEXT:    mov r12, r24
-; NONGNU-NEXT:    mov r13, r25
-; NONGNU-NEXT:    mov r24, r10
-; NONGNU-NEXT:    mov r25, r11
-; NONGNU-NEXT:    rcall __extendhfsf2
-; NONGNU-NEXT:    mov r10, r22
-; NONGNU-NEXT:    mov r11, r23
-; NONGNU-NEXT:    mov r8, r24
-; NONGNU-NEXT:    mov r9, r25
-; NONGNU-NEXT:    rcall cos
-; NONGNU-NEXT:    rcall __truncsfhf2
-; NONGNU-NEXT:    mov r6, r24
-; NONGNU-NEXT:    mov r7, r25
-; NONGNU-NEXT:    mov r22, r10
-; NONGNU-NEXT:    mov r23, r11
-; NONGNU-NEXT:    mov r24, r8
-; NONGNU-NEXT:    mov r25, r9
-; NONGNU-NEXT:    rcall sin
-; NONGNU-NEXT:    rcall __truncsfhf2
-; NONGNU-NEXT:    mov r10, r24
-; NONGNU-NEXT:    mov r11, r25
-; NONGNU-NEXT:    mov r22, r16
-; NONGNU-NEXT:    mov r23, r17
-; NONGNU-NEXT:    mov r24, r14
-; NONGNU-NEXT:    mov r25, r15
-; NONGNU-NEXT:    rcall cos
-; NONGNU-NEXT:    rcall __truncsfhf2
-; NONGNU-NEXT:    mov r18, r10
-; NONGNU-NEXT:    mov r19, r11
-; NONGNU-NEXT:    mov r20, r12
-; NONGNU-NEXT:    mov r21, r13
-; NONGNU-NEXT:    mov r22, r6
-; NONGNU-NEXT:    mov r23, r7
-; NONGNU-NEXT:    pop r17
-; NONGNU-NEXT:    pop r16
-; NONGNU-NEXT:    pop r15
-; NONGNU-NEXT:    pop r14
-; NONGNU-NEXT:    pop r13
-; NONGNU-NEXT:    pop r12
-; NONGNU-NEXT:    pop r11
-; NONGNU-NEXT:    pop r10
-; NONGNU-NEXT:    pop r9
-; NONGNU-NEXT:    pop r8
-; NONGNU-NEXT:    pop r7
-; NONGNU-NEXT:    pop r6
-; NONGNU-NEXT:    ret
-;
-; GNU-LABEL: test_sincos_v2f16:
-; GNU:       ; %bb.0:
-; GNU-NEXT:    push r12
-; GNU-NEXT:    push r13
-; GNU-NEXT:    push r14
-; GNU-NEXT:    push r15
-; GNU-NEXT:    push r16
-; GNU-NEXT:    push r17
-; GNU-NEXT:    push r28
-; GNU-NEXT:    push r29
-; GNU-NEXT:    in r28, 61
-; GNU-NEXT:    in r29, 62
-; GNU-NEXT:    sbiw r28, 16
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    mov r16, r24
-; GNU-NEXT:    mov r17, r25
-; GNU-NEXT:    mov r24, r22
-; GNU-NEXT:    mov r25, r23
-; GNU-NEXT:    rcall __extendhfsf2
-; GNU-NEXT:    mov r20, r28
-; GNU-NEXT:    mov r21, r29
-; GNU-NEXT:    subi r20, 243
-; GNU-NEXT:    sbci r21, 255
-; GNU-NEXT:    mov r18, r28
-; GNU-NEXT:    mov r19, r29
-; GNU-NEXT:    subi r18, 247
-; GNU-NEXT:    sbci r19, 255
-; GNU-NEXT:    rcall sincosf
-; GNU-NEXT:    mov r24, r16
-; GNU-NEXT:    mov r25, r17
-; GNU-NEXT:    rcall __extendhfsf2
-; GNU-NEXT:    mov r20, r28
-; GNU-NEXT:    mov r21, r29
-; GNU-NEXT:    subi r20, 251
-; GNU-NEXT:    sbci r21, 255
-; GNU-NEXT:    mov r18, r28
-; GNU-NEXT:    mov r19, r29
-; GNU-NEXT:    subi r18, 255
-; GNU-NEXT:    sbci r19, 255
-; GNU-NEXT:    rcall sincosf
-; GNU-NEXT:    ldd r22, Y+13
-; GNU-NEXT:    ldd r23, Y+14
-; GNU-NEXT:    ldd r24, Y+15
-; GNU-NEXT:    ldd r25, Y+16
-; GNU-NEXT:    rcall __truncsfhf2
-; GNU-NEXT:    mov r16, r24
-; GNU-NEXT:    mov r17, r25
-; GNU-NEXT:    ldd r22, Y+5
-; GNU-NEXT:    ldd r23, Y+6
-; GNU-NEXT:    ldd r24, Y+7
-; GNU-NEXT:    ldd r25, Y+8
-; GNU-NEXT:    rcall __truncsfhf2
-; GNU-NEXT:    mov r14, r24
-; GNU-NEXT:    mov r15, r25
-; GNU-NEXT:    ldd r22, Y+9
-; GNU-NEXT:    ldd r23, Y+10
-; GNU-NEXT:    ldd r24, Y+11
-; GNU-NEXT:    ldd r25, Y+12
-; GNU-NEXT:    rcall __truncsfhf2
-; GNU-NEXT:    mov r12, r24
-; GNU-NEXT:    mov r13, r25
-; GNU-NEXT:    ldd r22, Y+1
-; GNU-NEXT:    ldd r23, Y+2
-; GNU-NEXT:    ldd r24, Y+3
-; GNU-NEXT:    ldd r25, Y+4
-; GNU-NEXT:    rcall __truncsfhf2
-; GNU-NEXT:    mov r18, r16
-; GNU-NEXT:    mov r19, r17
-; GNU-NEXT:    mov r20, r14
-; GNU-NEXT:    mov r21, r15
-; GNU-NEXT:    mov r22, r12
-; GNU-NEXT:    mov r23, r13
-; GNU-NEXT:    adiw r28, 16
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    pop r29
-; GNU-NEXT:    pop r28
-; GNU-NEXT:    pop r17
-; GNU-NEXT:    pop r16
-; GNU-NEXT:    pop r15
-; GNU-NEXT:    pop r14
-; GNU-NEXT:    pop r13
-; GNU-NEXT:    pop r12
-; GNU-NEXT:    ret
+; CHECK-LABEL: test_sincos_v2f16:
+; CHECK:       ; %bb.0:
+; CHECK-NEXT:    push r6
+; CHECK-NEXT:    push r7
+; CHECK-NEXT:    push r8
+; CHECK-NEXT:    push r9
+; CHECK-NEXT:    push r10
+; CHECK-NEXT:    push r11
+; CHECK-NEXT:    push r12
+; CHECK-NEXT:    push r13
+; CHECK-NEXT:    push r14
+; CHECK-NEXT:    push r15
+; CHECK-NEXT:    push r16
+; CHECK-NEXT:    push r17
+; CHECK-NEXT:    mov r10, r22
+; CHECK-NEXT:    mov r11, r23
+; CHECK-NEXT:    rcall __extendhfsf2
+; CHECK-NEXT:    mov r16, r22
+; CHECK-NEXT:    mov r17, r23
+; CHECK-NEXT:    mov r14, r24
+; CHECK-NEXT:    mov r15, r25
+; CHECK-NEXT:    rcall sin
+; CHECK-NEXT:    rcall __truncsfhf2
+; CHECK-NEXT:    mov r12, r24
+; CHECK-NEXT:    mov r13, r25
+; CHECK-NEXT:    mov r24, r10
+; CHECK-NEXT:    mov r25, r11
+; CHECK-NEXT:    rcall __extendhfsf2
+; CHECK-NEXT:    mov r10, r22
+; CHECK-NEXT:    mov r11, r23
+; CHECK-NEXT:    mov r8, r24
+; CHECK-NEXT:    mov r9, r25
+; CHECK-NEXT:    rcall cos
+; CHECK-NEXT:    rcall __truncsfhf2
+; CHECK-NEXT:    mov r6, r24
+; CHECK-NEXT:    mov r7, r25
+; CHECK-NEXT:    mov r22, r10
+; CHECK-NEXT:    mov r23, r11
+; CHECK-NEXT:    mov r24, r8
+; CHECK-NEXT:    mov r25, r9
+; CHECK-NEXT:    rcall sin
+; CHECK-NEXT:    rcall __truncsfhf2
+; CHECK-NEXT:    mov r10, r24
+; CHECK-NEXT:    mov r11, r25
+; CHECK-NEXT:    mov r22, r16
+; CHECK-NEXT:    mov r23, r17
+; CHECK-NEXT:    mov r24, r14
+; CHECK-NEXT:    mov r25, r15
+; CHECK-NEXT:    rcall cos
+; CHECK-NEXT:    rcall __truncsfhf2
+; CHECK-NEXT:    mov r18, r10
+; CHECK-NEXT:    mov r19, r11
+; CHECK-NEXT:    mov r20, r12
+; CHECK-NEXT:    mov r21, r13
+; CHECK-NEXT:    mov r22, r6
+; CHECK-NEXT:    mov r23, r7
+; CHECK-NEXT:    pop r17
+; CHECK-NEXT:    pop r16
+; CHECK-NEXT:    pop r15
+; CHECK-NEXT:    pop r14
+; CHECK-NEXT:    pop r13
+; CHECK-NEXT:    pop r12
+; CHECK-NEXT:    pop r11
+; CHECK-NEXT:    pop r10
+; CHECK-NEXT:    pop r9
+; CHECK-NEXT:    pop r8
+; CHECK-NEXT:    pop r7
+; CHECK-NEXT:    pop r6
+; CHECK-NEXT:    ret
   %result = call { <2 x half>, <2 x half> } @llvm.sincos.v2f16(<2 x half> %a)
   ret { <2 x half>, <2 x half> } %result
 }
 
 define { float, float } @test_sincos_f32(float %a) #0 {
-; NONGNU-LABEL: test_sincos_f32:
-; NONGNU:       ; %bb.0:
-; NONGNU-NEXT:    push r10
-; NONGNU-NEXT:    push r11
-; NONGNU-NEXT:    push r12
-; NONGNU-NEXT:    push r13
-; NONGNU-NEXT:    push r14
-; NONGNU-NEXT:    push r15
-; NONGNU-NEXT:    push r16
-; NONGNU-NEXT:    push r17
-; NONGNU-NEXT:    mov r16, r24
-; NONGNU-NEXT:    mov r17, r25
-; NONGNU-NEXT:    mov r14, r22
-; NONGNU-NEXT:    mov r15, r23
-; NONGNU-NEXT:    rcall sin
-; NONGNU-NEXT:    mov r12, r22
-; NONGNU-NEXT:    mov r13, r23
-; NONGNU-NEXT:    mov r10, r24
-; NONGNU-NEXT:    mov r11, r25
-; NONGNU-NEXT:    mov r22, r14
-; NONGNU-NEXT:    mov r23, r15
-; NONGNU-NEXT:    mov r24, r16
-; NONGNU-NEXT:    mov r25, r17
-; NONGNU-NEXT:    rcall cos
-; NONGNU-NEXT:    mov r18, r12
-; NONGNU-NEXT:    mov r19, r13
-; NONGNU-NEXT:    mov r20, r10
-; NONGNU-NEXT:    mov r21, r11
-; NONGNU-NEXT:    pop r17
-; NONGNU-NEXT:    pop r16
-; NONGNU-NEXT:    pop r15
-; NONGNU-NEXT:    pop r14
-; NONGNU-NEXT:    pop r13
-; NONGNU-NEXT:    pop r12
-; NONGNU-NEXT:    pop r11
-; NONGNU-NEXT:    pop r10
-; NONGNU-NEXT:    ret
-;
-; GNU-LABEL: test_sincos_f32:
-; GNU:       ; %bb.0:
-; GNU-NEXT:    push r28
-; GNU-NEXT:    push r29
-; GNU-NEXT:    in r28, 61
-; GNU-NEXT:    in r29, 62
-; GNU-NEXT:    sbiw r28, 8
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    mov r20, r28
-; GNU-NEXT:    mov r21, r29
-; GNU-NEXT:    subi r20, 251
-; GNU-NEXT:    sbci r21, 255
-; GNU-NEXT:    mov r18, r28
-; GNU-NEXT:    mov r19, r29
-; GNU-NEXT:    subi r18, 255
-; GNU-NEXT:    sbci r19, 255
-; GNU-NEXT:    rcall sincosf
-; GNU-NEXT:    ldd r18, Y+5
-; GNU-NEXT:    ldd r19, Y+6
-; GNU-NEXT:    ldd r20, Y+7
-; GNU-NEXT:    ldd r21, Y+8
-; GNU-NEXT:    ldd r22, Y+1
-; GNU-NEXT:    ldd r23, Y+2
-; GNU-NEXT:    ldd r24, Y+3
-; GNU-NEXT:    ldd r25, Y+4
-; GNU-NEXT:    adiw r28, 8
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    pop r29
-; GNU-NEXT:    pop r28
-; GNU-NEXT:    ret
+; CHECK-LABEL: test_sincos_f32:
+; CHECK:       ; %bb.0:
+; CHECK-NEXT:    push r10
+; CHECK-NEXT:    push r11
+; CHECK-NEXT:    push r12
+; CHECK-NEXT:    push r13
+; CHECK-NEXT:    push r14
+; CHECK-NEXT:    push r15
+; CHECK-NEXT:    push r16
+; CHECK-NEXT:    push r17
+; CHECK-NEXT:    mov r16, r24
+; CHECK-NEXT:    mov r17, r25
+; CHECK-NEXT:    mov r14, r22
+; CHECK-NEXT:    mov r15, r23
+; CHECK-NEXT:    rcall sin
+; CHECK-NEXT:    mov r12, r22
+; CHECK-NEXT:    mov r13, r23
+; CHECK-NEXT:    mov r10, r24
+; CHECK-NEXT:    mov r11, r25
+; CHECK-NEXT:    mov r22, r14
+; CHECK-NEXT:    mov r23, r15
+; CHECK-NEXT:    mov r24, r16
+; CHECK-NEXT:    mov r25, r17
+; CHECK-NEXT:    rcall cos
+; CHECK-NEXT:    mov r18, r12
+; CHECK-NEXT:    mov r19, r13
+; CHECK-NEXT:    mov r20, r10
+; CHECK-NEXT:    mov r21, r11
+; CHECK-NEXT:    pop r17
+; CHECK-NEXT:    pop r16
+; CHECK-NEXT:    pop r15
+; CHECK-NEXT:    pop r14
+; CHECK-NEXT:    pop r13
+; CHECK-NEXT:    pop r12
+; CHECK-NEXT:    pop r11
+; CHECK-NEXT:    pop r10
+; CHECK-NEXT:    ret
   %result = call { float, float } @llvm.sincos.f32(float %a)
   ret { float, float } %result
 }
 
 define { <2 x float>, <2 x float> } @test_sincos_v2f32(<2 x float> %a) #0 {
-; NONGNU-LABEL: test_sincos_v2f32:
-; NONGNU:       ; %bb.0:
-; NONGNU-NEXT:    push r8
-; NONGNU-NEXT:    push r9
-; NONGNU-NEXT:    push r10
-; NONGNU-NEXT:    push r11
-; NONGNU-NEXT:    push r12
-; NONGNU-NEXT:    push r13
-; NONGNU-NEXT:    push r14
-; NONGNU-NEXT:    push r15
-; NONGNU-NEXT:    mov r14, r22
-; NONGNU-NEXT:    mov r15, r23
-; NONGNU-NEXT:    mov r12, r20
-; NONGNU-NEXT:    mov r13, r21
-; NONGNU-NEXT:    mov r10, r18
-; NONGNU-NEXT:    mov r11, r19
-; NONGNU-NEXT:    mov r8, r24
-; NONGNU-NEXT:    mov r9, r25
-; NONGNU-NEXT:    mov r22, r12
-; NONGNU-NEXT:    mov r23, r13
-; NONGNU-NEXT:    mov r24, r14
-; NONGNU-NEXT:    mov r25, r15
-; NONGNU-NEXT:    rcall cos
-; NONGNU-NEXT:    mov r30, r8
-; NONGNU-NEXT:    mov r31, r9
-; NONGNU-NEXT:    std Z+15, r25
-; NONGNU-NEXT:    std Z+14, r24
-; NONGNU-NEXT:    std Z+13, r23
-; NONGNU-NEXT:    std Z+12, r22
-; NONGNU-NEXT:    mov r22, r16
-; NONGNU-NEXT:    mov r23, r17
-; NONGNU-NEXT:    mov r24, r10
-; NONGNU-NEXT:    mov r25, r11
-; NONGNU-NEXT:    rcall cos
-; NONGNU-NEXT:    mov r30, r8
-; NONGNU-NEXT:    mov r31, r9
-; NONGNU-NEXT:    std Z+11, r25
-; NONGNU-NEXT:    std Z+10, r24
-; NONGNU-NEXT:    std Z+9, r23
-; NONGNU-NEXT:    std Z+8, r22
-; NONGNU-NEXT:    mov r22, r12
-; NONGNU-NEXT:    mov r23, r13
-; NONGNU-NEXT:    mov r24, r14
-; NONGNU-NEXT:    mov r25, r15
-; NONGNU-NEXT:    rcall sin
-; NONGNU-NEXT:    mov r30, r8
-; NONGNU-NEXT:    mov r31, r9
-; NONGNU-NEXT:    std Z+7, r25
-; NONGNU-NEXT:    std Z+6, r24
-; NONGNU-NEXT:    std Z+5, r23
-; NONGNU-NEXT:    std Z+4, r22
-; NONGNU-NEXT:    mov r22, r16
-; NONGNU-NEXT:    mov r23, r17
-; NONGNU-NEXT:    mov r24, r10
-; NONGNU-NEXT:    mov r25, r11
-; NONGNU-NEXT:    rcall sin
-; NONGNU-NEXT:    mov r30, r8
-; NONGNU-NEXT:    mov r31, r9
-; NONGNU-NEXT:    std Z+3, r25
-; NONGNU-NEXT:    std Z+2, r24
-; NONGNU-NEXT:    std Z+1, r23
-; NONGNU-NEXT:    st Z, r22
-; NONGNU-NEXT:    pop r15
-; NONGNU-NEXT:    pop r14
-; NONGNU-NEXT:    pop r13
-; NONGNU-NEXT:    pop r12
-; NONGNU-NEXT:    pop r11
-; NONGNU-NEXT:    pop r10
-; NONGNU-NEXT:    pop r9
-; NONGNU-NEXT:    pop r8
-; NONGNU-NEXT:    ret
-;
-; GNU-LABEL: test_sincos_v2f32:
-; GNU:       ; %bb.0:
-; GNU-NEXT:    push r12
-; GNU-NEXT:    push r13
-; GNU-NEXT:    push r14
-; GNU-NEXT:    push r15
-; GNU-NEXT:    push r28
-; GNU-NEXT:    push r29
-; GNU-NEXT:    in r28, 61
-; GNU-NEXT:    in r29, 62
-; GNU-NEXT:    sbiw r28, 16
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    mov r30, r22
-; GNU-NEXT:    mov r31, r23
-; GNU-NEXT:    mov r14, r18
-; GNU-NEXT:    mov r15, r19
-; GNU-NEXT:    mov r12, r24
-; GNU-NEXT:    mov r13, r25
-; GNU-NEXT:    mov r26, r28
-; GNU-NEXT:    mov r27, r29
-; GNU-NEXT:    adiw r26, 13
-; GNU-NEXT:    mov r18, r28
-; GNU-NEXT:    mov r19, r29
-; GNU-NEXT:    subi r18, 247
-; GNU-NEXT:    sbci r19, 255
-; GNU-NEXT:    mov r22, r20
-; GNU-NEXT:    mov r23, r21
-; GNU-NEXT:    mov r24, r30
-; GNU-NEXT:    mov r25, r31
-; GNU-NEXT:    mov r20, r26
-; GNU-NEXT:    mov r21, r27
-; GNU-NEXT:    rcall sincosf
-; GNU-NEXT:    mov r20, r28
-; GNU-NEXT:    mov r21, r29
-; GNU-NEXT:    subi r20, 251
-; GNU-NEXT:    sbci r21, 255
-; GNU-NEXT:    mov r18, r28
-; GNU-NEXT:    mov r19, r29
-; GNU-NEXT:    subi r18, 255
-; GNU-NEXT:    sbci r19, 255
-; GNU-NEXT:    mov r22, r16
-; GNU-NEXT:    mov r23, r17
-; GNU-NEXT:    mov r24, r14
-; GNU-NEXT:    mov r25, r15
-; GNU-NEXT:    rcall sincosf
-; GNU-NEXT:    ldd r24, Y+11
-; GNU-NEXT:    ldd r25, Y+12
-; GNU-NEXT:    mov r30, r12
-; GNU-NEXT:    mov r31, r13
-; GNU-NEXT:    std Z+15, r25
-; GNU-NEXT:    std Z+14, r24
-; GNU-NEXT:    ldd r24, Y+9
-; GNU-NEXT:    ldd r25, Y+10
-; GNU-NEXT:    std Z+13, r25
-; GNU-NEXT:    std Z+12, r24
-; GNU-NEXT:    ldd r24, Y+3
-; GNU-NEXT:    ldd r25, Y+4
-; GNU-NEXT:    std Z+11, r25
-; GNU-NEXT:    std Z+10, r24
-; GNU-NEXT:    ldd r24, Y+1
-; GNU-NEXT:    ldd r25, Y+2
-; GNU-NEXT:    std Z+9, r25
-; GNU-NEXT:    std Z+8, r24
-; GNU-NEXT:    ldd r24, Y+15
-; GNU-NEXT:    ldd r25, Y+16
-; GNU-NEXT:    std Z+7, r25
-; GNU-NEXT:    std Z+6, r24
-; GNU-NEXT:    ldd r24, Y+13
-; GNU-NEXT:    ldd r25, Y+14
-; GNU-NEXT:    std Z+5, r25
-; GNU-NEXT:    std Z+4, r24
-; GNU-NEXT:    ldd r24, Y+7
-; GNU-NEXT:    ldd r25, Y+8
-; GNU-NEXT:    std Z+3, r25
-; GNU-NEXT:    std Z+2, r24
-; GNU-NEXT:    ldd r24, Y+5
-; GNU-NEXT:    ldd r25, Y+6
-; GNU-NEXT:    std Z+1, r25
-; GNU-NEXT:    st Z, r24
-; GNU-NEXT:    adiw r28, 16
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    pop r29
-; GNU-NEXT:    pop r28
-; GNU-NEXT:    pop r15
-; GNU-NEXT:    pop r14
-; GNU-NEXT:    pop r13
-; GNU-NEXT:    pop r12
-; GNU-NEXT:    ret
+; CHECK-LABEL: test_sincos_v2f32:
+; CHECK:       ; %bb.0:
+; CHECK-NEXT:    push r8
+; CHECK-NEXT:    push r9
+; CHECK-NEXT:    push r10
+; CHECK-NEXT:    push r11
+; CHECK-NEXT:    push r12
+; CHECK-NEXT:    push r13
+; CHECK-NEXT:    push r14
+; CHECK-NEXT:    push r15
+; CHECK-NEXT:    mov r14, r22
+; CHECK-NEXT:    mov r15, r23
+; CHECK-NEXT:    mov r12, r20
+; CHECK-NEXT:    mov r13, r21
+; CHECK-NEXT:    mov r10, r18
+; CHECK-NEXT:    mov r11, r19
+; CHECK-NEXT:    mov r8, r24
+; CHECK-NEXT:    mov r9, r25
+; CHECK-NEXT:    mov r22, r12
+; CHECK-NEXT:    mov r23, r13
+; CHECK-NEXT:    mov r24, r14
+; CHECK-NEXT:    mov r25, r15
+; CHECK-NEXT:    rcall cos
+; CHECK-NEXT:    mov r30, r8
+; CHECK-NEXT:    mov r31, r9
+; CHECK-NEXT:    std Z+15, r25
+; CHECK-NEXT:    std Z+14, r24
+; CHECK-NEXT:    std Z+13, r23
+; CHECK-NEXT:    std Z+12, r22
+; CHECK-NEXT:    mov r22, r16
+; CHECK-NEXT:    mov r23, r17
+; CHECK-NEXT:    mov r24, r10
+; CHECK-NEXT:    mov r25, r11
+; CHECK-NEXT:    rcall cos
+; CHECK-NEXT:    mov r30, r8
+; CHECK-NEXT:    mov r31, r9
+; CHECK-NEXT:    std Z+11, r25
+; CHECK-NEXT:    std Z+10, r24
+; CHECK-NEXT:    std Z+9, r23
+; CHECK-NEXT:    std Z+8, r22
+; CHECK-NEXT:    mov r22, r12
+; CHECK-NEXT:    mov r23, r13
+; CHECK-NEXT:    mov r24, r14
+; CHECK-NEXT:    mov r25, r15
+; CHECK-NEXT:    rcall sin
+; CHECK-NEXT:    mov r30, r8
+; CHECK-NEXT:    mov r31, r9
+; CHECK-NEXT:    std Z+7, r25
+; CHECK-NEXT:    std Z+6, r24
+; CHECK-NEXT:    std Z+5, r23
+; CHECK-NEXT:    std Z+4, r22
+; CHECK-NEXT:    mov r22, r16
+; CHECK-NEXT:    mov r23, r17
+; CHECK-NEXT:    mov r24, r10
+; CHECK-NEXT:    mov r25, r11
+; CHECK-NEXT:    rcall sin
+; CHECK-NEXT:    mov r30, r8
+; CHECK-NEXT:    mov r31, r9
+; CHECK-NEXT:    std Z+3, r25
+; CHECK-NEXT:    std Z+2, r24
+; CHECK-NEXT:    std Z+1, r23
+; CHECK-NEXT:    st Z, r22
+; CHECK-NEXT:    pop r15
+; CHECK-NEXT:    pop r14
+; CHECK-NEXT:    pop r13
+; CHECK-NEXT:    pop r12
+; CHECK-NEXT:    pop r11
+; CHECK-NEXT:    pop r10
+; CHECK-NEXT:    pop r9
+; CHECK-NEXT:    pop r8
+; CHECK-NEXT:    ret
   %result = call { <2 x float>, <2 x float> } @llvm.sincos.v2f32(<2 x float> %a)
   ret { <2 x float>, <2 x float> } %result
 }
@@ -644,235 +280,127 @@ define { <2 x float>, <2 x float> } @test_sincos_v2f32(<2 x float> %a) #0 {
 ; }
 
 define { fp128, fp128 } @test_sincos_f128(fp128 %a) #0 {
-; NONGNU-LABEL: test_sincos_f128:
-; NONGNU:       ; %bb.0:
-; NONGNU-NEXT:    push r2
-; NONGNU-NEXT:    push r3
-; NONGNU-NEXT:    push r4
-; NONGNU-NEXT:    push r5
-; NONGNU-NEXT:    push r6
-; NONGNU-NEXT:    push r7
-; NONGNU-NEXT:    push r28
-; NONGNU-NEXT:    push r29
-; NONGNU-NEXT:    in r28, 61
-; NONGNU-NEXT:    in r29, 62
-; NONGNU-NEXT:    sbiw r28, 34
-; NONGNU-NEXT:    in r0, 63
-; NONGNU-NEXT:    cli
-; NONGNU-NEXT:    out 62, r29
-; NONGNU-NEXT:    out 63, r0
-; NONGNU-NEXT:    out 61, r28
-; NONGNU-NEXT:    std Y+2, r23 ; 2-byte Folded Spill
-; NONGNU-NEXT:    std Y+1, r22 ; 2-byte Folded Spill
-; NONGNU-NEXT:    mov r2, r20
-; NONGNU-NEXT:    mov r3, r21
-; NONGNU-NEXT:    mov r4, r18
-; NONGNU-NEXT:    mov r5, r19
-; NONGNU-NEXT:    mov r6, r24
-; NONGNU-NEXT:    mov r7, r25
-; NONGNU-NEXT:    mov r24, r28
-; NONGNU-NEXT:    mov r25, r29
-; NONGNU-NEXT:    adiw r24, 3
-; NONGNU-NEXT:    rcall cosl
-; NONGNU-NEXT:    mov r24, r28
-; NONGNU-NEXT:    mov r25, r29
-; NONGNU-NEXT:    adiw r24, 19
-; NONGNU-NEXT:    mov r18, r4
-; NONGNU-NEXT:    mov r19, r5
-; NONGNU-NEXT:    mov r20, r2
-; NONGNU-NEXT:    mov r21, r3
-; NONGNU-NEXT:    ldd r22, Y+1 ; 2-byte Folded Reload
-; NONGNU-NEXT:    ldd r23, Y+2 ; 2-byte Folded Reload
-; NONGNU-NEXT:    rcall sinl
-; NONGNU-NEXT:    ldd r24, Y+17
-; NONGNU-NEXT:    ldd r25, Y+18
-; NONGNU-NEXT:    mov r30, r6
-; NONGNU-NEXT:    mov r31, r7
-; NONGNU-NEXT:    std Z+31, r25
-; NONGNU-NEXT:    std Z+30, r24
-; NONGNU-NEXT:    ldd r24, Y+15
-; NONGNU-NEXT:    ldd r25, Y+16
-; NONGNU-NEXT:    std Z+29, r25
-; NONGNU-NEXT:    std Z+28, r24
-; NONGNU-NEXT:    ldd r24, Y+13
-; NONGNU-NEXT:    ldd r25, Y+14
-; NONGNU-NEXT:    std Z+27, r25
-; NONGNU-NEXT:    std Z+26, r24
-; NONGNU-NEXT:    ldd r24, Y+11
-; NONGNU-NEXT:    ldd r25, Y+12
-; NONGNU-NEXT:    std Z+25, r25
-; NONGNU-NEXT:    std Z+24, r24
-; NONGNU-NEXT:    ldd r24, Y+9
-; NONGNU-NEXT:    ldd r25, Y+10
-; NONGNU-NEXT:    std Z+23, r25
-; NONGNU-NEXT:    std Z+22, r24
-; NONGNU-NEXT:    ldd r24, Y+7
-; NONGNU-NEXT:    ldd r25, Y+8
-; NONGNU-NEXT:    std Z+21, r25
-; NONGNU-NEXT:    std Z+20, r24
-; NONGNU-NEXT:    ldd r24, Y+5
-; NONGNU-NEXT:    ldd r25, Y+6
-; NONGNU-NEXT:    std Z+19, r25
-; NONGNU-NEXT:    std Z+18, r24
-; NONGNU-NEXT:    ldd r24, Y+3
-; NONGNU-NEXT:    ldd r25, Y+4
-; NONGNU-NEXT:    std Z+17, r25
-; NONGNU-NEXT:    std Z+16, r24
-; NONGNU-NEXT:    ldd r24, Y+33
-; NONGNU-NEXT:    ldd r25, Y+34
-; NONGNU-NEXT:    std Z+15, r25
-; NONGNU-NEXT:    std Z+14, r24
-; NONGNU-NEXT:    ldd r24, Y+31
-; NONGNU-NEXT:    ldd r25, Y+32
-; NONGNU-NEXT:    std Z+13, r25
-; NONGNU-NEXT:    std Z+12, r24
-; NONGNU-NEXT:    ldd r24, Y+29
-; NONGNU-NEXT:    ldd r25, Y+30
-; NONGNU-NEXT:    std Z+11, r25
-; NONGNU-NEXT:    std Z+10, r24
-; NONGNU-NEXT:    ldd r24, Y+27
-; NONGNU-NEXT:    ldd r25, Y+28
-; NONGNU-NEXT:    std Z+9, r25
-; NONGNU-NEXT:    std Z+8, r24
-; NONGNU-NEXT:    ldd r24, Y+25
-; NONGNU-NEXT:    ldd r25, Y+26
-; NONGNU-NEXT:    std Z+7, r25
-; NONGNU-NEXT:    std Z+6, r24
-; NONGNU-NEXT:    ldd r24, Y+23
-; NONGNU-NEXT:    ldd r25, Y+24
-; NONGNU-NEXT:    std Z+5, r25
-; NONGNU-NEXT:    std Z+4, r24
-; NONGNU-NEXT:    ldd r24, Y+21
-; NONGNU-NEXT:    ldd r25, Y+22
-; NONGNU-NEXT:    std Z+3, r25
-; NONGNU-NEXT:    std Z+2, r24
-; NONGNU-NEXT:    ldd r24, Y+19
-; NONGNU-NEXT:    ldd r25, Y+20
-; NONGNU-NEXT:    std Z+1, r25
-; NONGNU-NEXT:    st Z, r24
-; NONGNU-NEXT:    adiw r28, 34
-; NONGNU-NEXT:    in r0, 63
-; NONGNU-NEXT:    cli
-; NONGNU-NEXT:    out 62, r29
-; NONGNU-NEXT:    out 63, r0
-; NONGNU-NEXT:    out 61, r28
-; NONGNU-NEXT:    pop r29
-; NONGNU-NEXT:    pop r28
-; NONGNU-NEXT:    pop r7
-; NONGNU-NEXT:    pop r6
-; NONGNU-NEXT:    pop r5
-; NONGNU-NEXT:    pop r4
-; NONGNU-NEXT:    pop r3
-; NONGNU-NEXT:    pop r2
-; NONGNU-NEXT:    ret
-;
-; GNU-LABEL: test_sincos_f128:
-; GNU:       ; %bb.0:
-; GNU-NEXT:    push r6
-; GNU-NEXT:    push r7
-; GNU-NEXT:    push r28
-; GNU-NEXT:    push r29
-; GNU-NEXT:    in r28, 61
-; GNU-NEXT:    in r29, 62
-; GNU-NEXT:    sbiw r28, 52
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    mov r6, r24
-; GNU-NEXT:    mov r7, r25
-; GNU-NEXT:    mov r24, r28
-; GNU-NEXT:    mov r25, r29
-; GNU-NEXT:    adiw r24, 21
-; GNU-NEXT:    std Y+4, r25
-; GNU-NEXT:    std Y+3, r24
-; GNU-NEXT:    mov r24, r28
-; GNU-NEXT:    mov r25, r29
-; GNU-NEXT:    adiw r24, 37
-; GNU-NEXT:    std Y+2, r25
-; GNU-NEXT:    std Y+1, r24
-; GNU-NEXT:    mov r24, r28
-; GNU-NEXT:    mov r25, r29
-; GNU-NEXT:    adiw r24, 5
-; GNU-NEXT:    rcall sincosl
-; GNU-NEXT:    ldd r24, Y+35
-; GNU-NEXT:    ldd r25, Y+36
-; GNU-NEXT:    mov r30, r6
-; GNU-NEXT:    mov r31, r7
-; GNU-NEXT:    std Z+31, r25
-; GNU-NEXT:    std Z+30, r24
-; GNU-NEXT:    ldd r24, Y+33
-; GNU-NEXT:    ldd r25, Y+34
-; GNU-NEXT:    std Z+29, r25
-; GNU-NEXT:    std Z+28, r24
-; GNU-NEXT:    ldd r24, Y+31
-; GNU-NEXT:    ldd r25, Y+32
-; GNU-NEXT:    std Z+27, r25
-; GNU-NEXT:    std Z+26, r24
-; GNU-NEXT:    ldd r24, Y+29
-; GNU-NEXT:    ldd r25, Y+30
-; GNU-NEXT:    std Z+25, r25
-; GNU-NEXT:    std Z+24, r24
-; GNU-NEXT:    ldd r24, Y+27
-; GNU-NEXT:    ldd r25, Y+28
-; GNU-NEXT:    std Z+23, r25
-; GNU-NEXT:    std Z+22, r24
-; GNU-NEXT:    ldd r24, Y+25
-; GNU-NEXT:    ldd r25, Y+26
-; GNU-NEXT:    std Z+21, r25
-; GNU-NEXT:    std Z+20, r24
-; GNU-NEXT:    ldd r24, Y+23
-; GNU-NEXT:    ldd r25, Y+24
-; GNU-NEXT:    std Z+19, r25
-; GNU-NEXT:    std Z+18, r24
-; GNU-NEXT:    ldd r24, Y+21
-; GNU-NEXT:    ldd r25, Y+22
-; GNU-NEXT:    std Z+17, r25
-; GNU-NEXT:    std Z+16, r24
-; GNU-NEXT:    ldd r24, Y+51
-; GNU-NEXT:    ldd r25, Y+52
-; GNU-NEXT:    std Z+15, r25
-; GNU-NEXT:    std Z+14, r24
-; GNU-NEXT:    ldd r24, Y+49
-; GNU-NEXT:    ldd r25, Y+50
-; GNU-NEXT:    std Z+13, r25
-; GNU-NEXT:    std Z+12, r24
-; GNU-NEXT:    ldd r24, Y+47
-; GNU-NEXT:    ldd r25, Y+48
-; GNU-NEXT:    std Z+11, r25
-; GNU-NEXT:    std Z+10, r24
-; GNU-NEXT:    ldd r24, Y+45
-; GNU-NEXT:    ldd r25, Y+46
-; GNU-NEXT:    std Z+9, r25
-; GNU-NEXT:    std Z+8, r24
-; GNU-NEXT:    ldd r24, Y+43
-; GNU-NEXT:    ldd r25, Y+44
-; GNU-NEXT:    std Z+7, r25
-; GNU-NEXT:    std Z+6, r24
-; GNU-NEXT:    ldd r24, Y+41
-; GNU-NEXT:    ldd r25, Y+42
-; GNU-NEXT:    std Z+5, r25
-; GNU-NEXT:    std Z+4, r24
-; GNU-NEXT:    ldd r24, Y+39
-; GNU-NEXT:    ldd r25, Y+40
-; GNU-NEXT:    std Z+3, r25
-; GNU-NEXT:    std Z+2, r24
-; GNU-NEXT:    ldd r24, Y+37
-; GNU-NEXT:    ldd r25, Y+38
-; GNU-NEXT:    std Z+1, r25
-; GNU-NEXT:    st Z, r24
-; GNU-NEXT:    adiw r28, 52
-; GNU-NEXT:    in r0, 63
-; GNU-NEXT:    cli
-; GNU-NEXT:    out 62, r29
-; GNU-NEXT:    out 63, r0
-; GNU-NEXT:    out 61, r28
-; GNU-NEXT:    pop r29
-; GNU-NEXT:    pop r28
-; GNU-NEXT:    pop r7
-; GNU-NEXT:    pop r6
-; GNU-NEXT:    ret
+; CHECK-LABEL: test_sincos_f128:
+; CHECK:       ; %bb.0:
+; CHECK-NEXT:    push r2
+; CHECK-NEXT:    push r3
+; CHECK-NEXT:    push r4
+; CHECK-NEXT:    push r5
+; CHECK-NEXT:    push r6
+; CHECK-NEXT:    push r7
+; CHECK-NEXT:    push r28
+; CHECK-NEXT:    push r29
+; CHECK-NEXT:    in r28, 61
+; CHECK-NEXT:    in r29, 62
+; CHECK-NEXT:    sbiw r28, 34
+; CHECK-NEXT:    in r0, 63
+; CHECK-NEXT:    cli
+; CHECK-NEXT:    out 62, r29
+; CHECK-NEXT:    out 63, r0
+; CHECK-NEXT:    out 61, r28
+; CHECK-NEXT:    std Y+2, r23 ; 2-byte Folded Spill
+; CHECK-NEXT:    std Y+1, r22 ; 2-byte Folded Spill
+; CHECK-NEXT:    mov r2, r20
+; CHECK-NEXT:    mov r3, r21
+; CHECK-NEXT:    mov r4, r18
+; CHECK-NEXT:    mov r5, r19
+; CHECK-NEXT:    mov r6, r24
+; CHECK-NEXT:    mov r7, r25
+; CHECK-NEXT:    mov r24, r28
+; CHECK-NEXT:    mov r25, r29
+; CHECK-NEXT:    adiw r24, 3
+; CHECK-NEXT:    rcall cosl
+; CHECK-NEXT:    mov r24, r28
+; CHECK-NEXT:    mov r25, r29
+; CHECK-NEXT:    adiw r24, 19
+; CHECK-NEXT:    mov r18, r4
+; CHECK-NEXT:    mov r19, r5
+; CHECK-NEXT:    mov r20, r2
+; CHECK-NEXT:    mov r21, r3
+; CHECK-NEXT:    ldd r22, Y+1 ; 2-byte Folded Reload
+; CHECK-NEXT:    ldd r23, Y+2 ; 2-byte Folded Reload
+; CHECK-NEXT:    rcall sinl
+; CHECK-NEXT:    ldd r24, Y+17
+; CHECK-NEXT:    ldd r25, Y+18
+; CHECK-NEXT:    mov r30, r6
+; CHECK-NEXT:    mov r31, r7
+; CHECK-NEXT:    std Z+31, r25
+; CHECK-NEXT:    std Z+30, r24
+; CHECK-NEXT:    ldd r24, Y+15
+; CHECK-NEXT:    ldd r25, Y+16
+; CHECK-NEXT:    std Z+29, r25
+; CHECK-NEXT:    std Z+28, r24
+; CHECK-NEXT:    ldd r24, Y+13
+; CHECK-NEXT:    ldd r25, Y+14
+; CHECK-NEXT:    std Z+27, r25
+; CHECK-NEXT:    std Z+26, r24
+; CHECK-NEXT:    ldd r24, Y+11
+; CHECK-NEXT:    ldd r25, Y+12
+; CHECK-NEXT:    std Z+25, r25
+; CHECK-NEXT:    std Z+24, r24
+; CHECK-NEXT:    ldd r24, Y+9
+; CHECK-NEXT:    ldd r25, Y+10
+; CHECK-NEXT:    std Z+23, r25
+; CHECK-NEXT:    std Z+22, r24
+; CHECK-NEXT:    ldd r24, Y+7
+; CHECK-NEXT:    ldd r25, Y+8
+; CHECK-NEXT:    std Z+21, r25
+; CHECK-NEXT:    std Z+20, r24
+; CHECK-NEXT:    ldd r24, Y+5
+; CHECK-NEXT:    ldd r25, Y+6
+; CHECK-NEXT:    std Z+19, r25
+; CHECK-NEXT:    std Z+18, r24
+; CHECK-NEXT:    ldd r24, Y+3
+; CHECK-NEXT:    ldd r25, Y+4
+; CHECK-NEXT:    std Z+17, r25
+; CHECK-NEXT:    std Z+16, r24
+; CHECK-NEXT:    ldd r24, Y+33
+; CHECK-NEXT:    ldd r25, Y+34
+; CHECK-NEXT:    std Z+15, r25
+; CHECK-NEXT:    std Z+14, r24
+; CHECK-NEXT:    ldd r24, Y+31
+; CHECK-NEXT:    ldd r25, Y+32
+; CHECK-NEXT:    std Z+13, r25
+; CHECK-NEXT:    std Z+12, r24
+; CHECK-NEXT:    ldd r24, Y+29
+; CHECK-NEXT:    ldd r25, Y+30
+; CHECK-NEXT:    std Z+11, r25
+; CHECK-NEXT:    std Z+10, r24
+; CHECK-NEXT:    ldd r24, Y+27
+; CHECK-NEXT:    ldd r25, Y+28
+; CHECK-NEXT:    std Z+9, r25
+; CHECK-NEXT:    std Z+8, r24
+; CHECK-NEXT:    ldd r24, Y+25
+; CHECK-NEXT:    ldd r25, Y+26
+; CHECK-NEXT:    std Z+7, r25
+; CHECK-NEXT:    std Z+6, r24
+; CHECK-NEXT:    ldd r24, Y+23
+; CHECK-NEXT:    ldd r25, Y+24
+; CHECK-NEXT:    std Z+5, r25
+; CHECK-NEXT:    std Z+4, r24
+; CHECK-NEXT:    ldd r24, Y+21
+; CHECK-NEXT:    ldd r25, Y+22
+; CHECK-NEXT:    std Z+3, r25
+; CHECK-NEXT:    std Z+2, r24
+; CHECK-NEXT:    ldd r24, Y+19
+; CHECK-NEXT:    ldd r25, Y+20
+; CHECK-NEXT:    std Z+1, r25
+; CHECK-NEXT:    st Z, r24
+; CHECK-NEXT:    adiw r28, 34
+; CHECK-NEXT:    in r0, 63
+; CHECK-NEXT:    cli
+; CHECK-NEXT:    out 62, r29
+; CHECK-NEXT:    out 63, r0
+; CHECK-NEXT:    out 61, r28
+; CHECK-NEXT:    pop r29
+; CHECK-NEXT:    pop r28
+; CHECK-NEXT:    pop r7
+; CHECK-NEXT:    pop r6
+; CHECK-NEXT:    pop r5
+; CHECK-NEXT:    pop r4
+; CHECK-NEXT:    pop r3
+; CHECK-NEXT:    pop r2
+; CHECK-NEXT:    ret
   %result = call { fp128, fp128 } @llvm.sincos.f128(fp128 %a)
   ret { fp128, fp128 } %result
 }
@@ -880,4 +408,5 @@ define { fp128, fp128 } @test_sincos_f128(fp128 %a) #0 {
 attributes #0 = { nounwind }
 
 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
-; CHECK: {{.*}}
+; GNU: {{.*}}
+; NONGNU: {{.*}}
diff --git a/llvm/test/TableGen/RuntimeLibcallEmitter.td b/llvm/test/TableGen/RuntimeLibcallEmitter.td
index 783a861cfe756..642f8b85a89c6 100644
--- a/llvm/test/TableGen/RuntimeLibcallEmitter.td
+++ b/llvm/test/TableGen/RuntimeLibcallEmitter.td
@@ -104,18 +104,6 @@ def BlahLibrary : SystemRuntimeLibrary<isBlahArch, (add calloc, LibraryWithCondi
 // CHECK-NEXT: #endif
 
 // CHECK: #ifdef GET_INIT_RUNTIME_LIBCALL_NAMES
-// CHECK-NEXT: const RTLIB::LibcallImpl llvm::RTLIB::RuntimeLibcallsInfo::DefaultLibcallImpls[RTLIB::UNKNOWN_LIBCALL + 1] = {
-// CHECK-NEXT:   RTLIB::Unsupported, // RTLIB::BZERO
-// CHECK-NEXT:   RTLIB::Unsupported, // RTLIB::CALLOC
-// CHECK-NEXT:   RTLIB::Unsupported, // RTLIB::MEMCPY
-// CHECK-NEXT:   RTLIB::Unsupported, // RTLIB::MEMSET
-// CHECK-NEXT:   RTLIB::__ashlsi3, // RTLIB::SHL_I32
-// CHECK-NEXT:   RTLIB::sqrtl_f80, // RTLIB::SQRT_F80
-// CHECK-NEXT:   RTLIB::sqrtl_f128, // RTLIB::SQRT_F128
-// CHECK-NEXT:   RTLIB::__lshrdi3, // RTLIB::SRL_I64
-// CHECK-NEXT:   RTLIB::Unsupported
-// CHECK-NEXT: };
-// CHECK-EMPTY:
 // CHECK-EMPTY:
 // CHECK-NEXT: #ifdef __GNUC__
 // CHECK-NEXT: #pragma GCC diagnostic push
@@ -257,7 +245,7 @@ def BlahLibrary : SystemRuntimeLibrary<isBlahArch, (add calloc, LibraryWithCondi
 // CHECK-EMPTY:
 // CHECK-NEXT:   return;
 // CHECK-NEXT: }
-// CHECK-NEXT:  initDefaultLibCallImpls();
+// CHECK-NEXT:  LLVM_DEBUG(dbgs() << "no system runtime library applied to target \'" << TT.str() << "\'\n");
 // CHECK-NEXT: }
 // CHECK-EMPTY:
 // CHECK: #endif
diff --git a/llvm/utils/TableGen/Basic/RuntimeLibcallsEmitter.cpp b/llvm/utils/TableGen/Basic/RuntimeLibcallsEmitter.cpp
index a280604ade2e8..412431b96d030 100644
--- a/llvm/utils/TableGen/Basic/RuntimeLibcallsEmitter.cpp
+++ b/llvm/utils/TableGen/Basic/RuntimeLibcallsEmitter.cpp
@@ -317,29 +317,6 @@ void RuntimeLibcallEmitter::emitGetRuntimeLibcallEnum(raw_ostream &OS) const {
 
 void RuntimeLibcallEmitter::emitGetInitRuntimeLibcallNames(
     raw_ostream &OS) const {
-  OS << "const RTLIB::LibcallImpl "
-        "llvm::RTLIB::RuntimeLibcallsInfo::"
-        "DefaultLibcallImpls[RTLIB::UNKNOWN_LIBCALL + 1] = {\n";
-
-  for (const RuntimeLibcall &LibCall : RuntimeLibcallDefList) {
-    auto I = LibCallToDefaultImpl.find(&LibCall);
-    if (I == LibCallToDefaultImpl.end()) {
-      OS << "  RTLIB::Unsupported,";
-    } else {
-      const RuntimeLibcallImpl *LibCallImpl = I->second;
-      OS << "  ";
-      LibCallImpl->emitEnumEntry(OS);
-      OS << ',';
-    }
-
-    OS << " // ";
-    LibCall.emitEnumEntry(OS);
-    OS << '\n';
-  }
-
-  OS << "  RTLIB::Unsupported\n"
-        "};\n\n";
-
   // Emit the implementation names
   StringToOffsetTable Table(/*AppendZero=*/true,
                             "RTLIB::RuntimeLibcallsInfo::");
@@ -545,13 +522,11 @@ void RuntimeLibcallEmitter::emitSystemRuntimeLibrarySetCalls(
     TopLevelPredicate.emitEndIf(OS);
   }
 
-  // Fallback to the old default set for manual table entries.
-  //
-  // TODO: Remove this when targets have switched to using generated tables by
-  // default.
-  OS << "  initDefaultLibCallImpls();\n";
-
-  OS << "}\n\n";
+  // FIXME: This should be a fatal error. A few contexts are improperly relying
+  // on RuntimeLibcalls constructed with fully unknown triples.
+  OS << "  LLVM_DEBUG(dbgs() << \"no system runtime library applied to target "
+        "\\'\" << TT.str() << \"\\'\\n\");\n"
+        "}\n\n";
 }
 
 void RuntimeLibcallEmitter::run(raw_ostream &OS) {



More information about the llvm-branch-commits mailing list