]> granicus.if.org Git - llvm/commitdiff
Merging r263428:
authorDaniel Sanders <daniel.sanders@imgtec.com>
Sat, 28 May 2016 16:11:58 +0000 (16:11 +0000)
committerDaniel Sanders <daniel.sanders@imgtec.com>
Sat, 28 May 2016 16:11:58 +0000 (16:11 +0000)
------------------------------------------------------------------------
r263428 | zbuljan | 2016-03-14 12:50:23 +0000 (Mon, 14 Mar 2016) | 3 lines

[mips] Fix an issue with long double when function roundl is defined
Differential Revision: http://reviews.llvm.org/D17760

------------------------------------------------------------------------

git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_38@271127 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Mips/MipsCCState.cpp
test/CodeGen/Mips/cconv/roundl-call.ll [new file with mode: 0644]

index d82063e3d2a943fde67932f6a2d593e4d56f5ffa..7af988c1f64d914dd1dc3d0c9799a7cb2491606f 100644 (file)
@@ -26,8 +26,8 @@ static bool isF128SoftLibCall(const char *CallSym) {
       "ceill",         "copysignl",    "cosl",          "exp2l",
       "expl",          "floorl",       "fmal",          "fmodl",
       "log10l",        "log2l",        "logl",          "nearbyintl",
-      "powl",          "rintl",        "sinl",          "sqrtl",
-      "truncl"};
+      "powl",          "rintl",        "roundl",        "sinl",
+      "sqrtl",         "truncl"};
 
   // Check that LibCalls is sorted alphabetically.
   auto Comp = [](const char *S1, const char *S2) { return strcmp(S1, S2) < 0; };
diff --git a/test/CodeGen/Mips/cconv/roundl-call.ll b/test/CodeGen/Mips/cconv/roundl-call.ll
new file mode 100644 (file)
index 0000000..2c77a60
--- /dev/null
@@ -0,0 +1,44 @@
+; RUN: llc -march=mips64 -mcpu=mips64 -target-abi=n32 < %s | FileCheck %s \
+; RUN:     -check-prefix=ALL -check-prefix=N32 -check-prefix=HARD-FLOAT
+; RUN: llc -march=mips64el -mcpu=mips64 -target-abi=n32 < %s | FileCheck %s \
+; RUN:     -check-prefix=ALL -check-prefix=N32 -check-prefix=HARD-FLOAT
+
+; RUN: llc -march=mips64 -mcpu=mips64 -target-abi=n64 < %s | FileCheck %s \
+; RUN:     -check-prefix=ALL -check-prefix=N64 -check-prefix=HARD-FLOAT
+; RUN: llc -march=mips64el -mcpu=mips64 -target-abi=n64 < %s | FileCheck %s \
+; RUN:     -check-prefix=ALL -check-prefix=N64 -check-prefix=HARD-FLOAT
+
+; RUN: llc -march=mips64 -mcpu=mips64 -mattr=+soft-float -target-abi=n32 < %s \
+; RUN: | FileCheck %s -check-prefix=ALL -check-prefix=N32 \
+; RUN:                -check-prefix=SOFT-FLOAT
+; RUN: llc -march=mips64el -mcpu=mips64 -mattr=+soft-float -target-abi=n32 < \
+; RUN:     %s | FileCheck %s -check-prefix=ALL -check-prefix=N32 \
+; RUN:                       -check-prefix=SOFT-FLOAT
+
+; RUN: llc -march=mips64 -mcpu=mips64 -mattr=+soft-float -target-abi=n64 < %s \
+; RUN: | FileCheck %s -check-prefix=ALL -check-prefix=N64 \
+; RUN:                -check-prefix=SOFT-FLOAT
+; RUN: llc -march=mips64el -mcpu=mips64 -mattr=+soft-float -target-abi=n64 < \
+; RUN:     %s | FileCheck %s -check-prefix=ALL -check-prefix=N64 \
+; RUN:                       -check-prefix=SOFT-FLOAT
+
+@fp128 = global fp128 zeroinitializer
+
+define void @roundl_call(fp128 %value) {
+entry:
+; ALL-LABEL: roundl_call:
+; N32:          lw      $25, %call16(roundl)($gp)
+; N64:          ld      $25, %call16(roundl)($gp)
+
+; SOFT-FLOAT:   sd      $4, 8(${{[0-9]+}})
+; SOFT-FLOAT:   sd      $2, 0(${{[0-9]+}})
+
+; HARD-FLOAT:   sdc1    $f2, 8(${{[0-9]+}})
+; HARD-FLOAT:   sdc1    $f0, 0(${{[0-9]+}})
+
+  %call = call fp128 @roundl(fp128 %value)
+  store fp128 %call, fp128* @fp128
+  ret void
+}
+
+declare fp128 @roundl(fp128) nounwind readnone