[llvm-branch-commits] [clang] [llvm] Revert "[RISCV] Support RISCV BitInt larger than 128 (#175515)" (#178311) (PR #178693)

Craig Topper via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Thu Jan 29 08:11:48 PST 2026


https://github.com/topperc created https://github.com/llvm/llvm-project/pull/178693

This reverts commit e3156c531da5aa4ec604605ed4e19638879d773c.

We need to resolve a crash on trunk and LLVM 22. Reverting makes it easier to backport.

Fixes #176637.

>From bb1aecf44f17ac60690fee9938be2e2eb345efa6 Mon Sep 17 00:00:00 2001
From: Craig Topper <craig.topper at sifive.com>
Date: Thu, 29 Jan 2026 07:16:14 -0800
Subject: [PATCH] Revert "[RISCV] Support RISCV BitInt larger than 128
 (#175515)" (#178311)

This reverts commit e3156c531da5aa4ec604605ed4e19638879d773c.

We need to resolve a crash on trunk and LLVM 22. Reverting makes it
easier to backport.

Fixes #176637.
---
 clang/lib/Basic/Targets/RISCV.h               |    4 -
 clang/test/CodeGen/RISCV/bitint.c             |  254 +-
 clang/test/CodeGen/ext-int-cc.c               |    2 +
 llvm/lib/Target/RISCV/RISCVISelLowering.cpp   |    2 -
 llvm/test/CodeGen/RISCV/bitint-fp-conv-200.ll | 2175 ------
 llvm/test/CodeGen/RISCV/fpclamptosat.ll       | 6241 +++--------------
 6 files changed, 887 insertions(+), 7791 deletions(-)
 delete mode 100644 llvm/test/CodeGen/RISCV/bitint-fp-conv-200.ll

diff --git a/clang/lib/Basic/Targets/RISCV.h b/clang/lib/Basic/Targets/RISCV.h
index 619d491d379d3..685735b54a45b 100644
--- a/clang/lib/Basic/Targets/RISCV.h
+++ b/clang/lib/Basic/Targets/RISCV.h
@@ -109,10 +109,6 @@ class RISCVTargetInfo : public TargetInfo {
 
   bool hasBitIntType() const override { return true; }
 
-  size_t getMaxBitIntWidth() const override {
-    return llvm::IntegerType::MAX_INT_BITS;
-  }
-
   bool hasBFloat16Type() const override { return true; }
 
   CallingConvCheckResult checkCallingConvention(CallingConv CC) const override;
diff --git a/clang/test/CodeGen/RISCV/bitint.c b/clang/test/CodeGen/RISCV/bitint.c
index 26ac3dbf7d1f9..1ad43affac9e6 100644
--- a/clang/test/CodeGen/RISCV/bitint.c
+++ b/clang/test/CodeGen/RISCV/bitint.c
@@ -145,25 +145,25 @@ _BitInt(32) test_bitint_32_add_default(_BitInt(32) a, _BitInt(32) b) {
 // RISCV32-LABEL: define {{[^@]+}}@test_bitint_65_add_unsigned
 // RISCV32-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
 // RISCV32-NEXT:  entry:
-// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10:![0-9]+]]
+// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA6:![0-9]+]]
 // RISCV32-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i65
-// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
+// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA6]]
 // RISCV32-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i65
 // RISCV32-NEXT:    [[ADD:%.*]] = add i65 [[B]], [[A]]
 // RISCV32-NEXT:    [[STOREDV4:%.*]] = zext i65 [[ADD]] to i128
-// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
+// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA6]]
 // RISCV32-NEXT:    ret void
 //
 // RISCV32_INT128-LABEL: define {{[^@]+}}@test_bitint_65_add_unsigned
 // RISCV32_INT128-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
 // RISCV32_INT128-NEXT:  entry:
-// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10:![0-9]+]]
+// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA6:![0-9]+]]
 // RISCV32_INT128-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i65
-// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
+// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA6]]
 // RISCV32_INT128-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i65
 // RISCV32_INT128-NEXT:    [[ADD:%.*]] = add i65 [[B]], [[A]]
 // RISCV32_INT128-NEXT:    [[STOREDV4:%.*]] = zext i65 [[ADD]] to i128
-// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
+// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA6]]
 // RISCV32_INT128-NEXT:    ret void
 //
 unsigned _BitInt(65) test_bitint_65_add_unsigned(unsigned _BitInt(65) a, unsigned _BitInt(65) b) {
@@ -179,25 +179,25 @@ unsigned _BitInt(65) test_bitint_65_add_unsigned(unsigned _BitInt(65) a, unsigne
 // RISCV32-LABEL: define {{[^@]+}}@test_bitint_65_add_signed
 // RISCV32-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
 // RISCV32-NEXT:  entry:
-// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]
+// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]
 // RISCV32-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i65
-// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
+// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA6]]
 // RISCV32-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i65
 // RISCV32-NEXT:    [[ADD:%.*]] = add nsw i65 [[B]], [[A]]
 // RISCV32-NEXT:    [[STOREDV4:%.*]] = sext i65 [[ADD]] to i128
-// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
+// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA6]]
 // RISCV32-NEXT:    ret void
 //
 // RISCV32_INT128-LABEL: define {{[^@]+}}@test_bitint_65_add_signed
 // RISCV32_INT128-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
 // RISCV32_INT128-NEXT:  entry:
-// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]
+// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]
 // RISCV32_INT128-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i65
-// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
+// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA6]]
 // RISCV32_INT128-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i65
 // RISCV32_INT128-NEXT:    [[ADD:%.*]] = add nsw i65 [[B]], [[A]]
 // RISCV32_INT128-NEXT:    [[STOREDV4:%.*]] = sext i65 [[ADD]] to i128
-// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
+// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA6]]
 // RISCV32_INT128-NEXT:    ret void
 //
 signed _BitInt(65) test_bitint_65_add_signed(signed _BitInt(65) a, signed _BitInt(65) b) {
@@ -213,25 +213,25 @@ signed _BitInt(65) test_bitint_65_add_signed(signed _BitInt(65) a, signed _BitIn
 // RISCV32-LABEL: define {{[^@]+}}@test_bitint_65_add_default
 // RISCV32-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
 // RISCV32-NEXT:  entry:
-// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]
+// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]
 // RISCV32-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i65
-// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
+// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA6]]
 // RISCV32-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i65
 // RISCV32-NEXT:    [[ADD:%.*]] = add nsw i65 [[B]], [[A]]
 // RISCV32-NEXT:    [[STOREDV4:%.*]] = sext i65 [[ADD]] to i128
-// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
+// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA6]]
 // RISCV32-NEXT:    ret void
 //
 // RISCV32_INT128-LABEL: define {{[^@]+}}@test_bitint_65_add_default
 // RISCV32_INT128-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
 // RISCV32_INT128-NEXT:  entry:
-// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]
+// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA6]]
 // RISCV32_INT128-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i65
-// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
+// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA6]]
 // RISCV32_INT128-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i65
 // RISCV32_INT128-NEXT:    [[ADD:%.*]] = add nsw i65 [[B]], [[A]]
 // RISCV32_INT128-NEXT:    [[STOREDV4:%.*]] = sext i65 [[ADD]] to i128
-// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
+// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA6]]
 // RISCV32_INT128-NEXT:    ret void
 //
 _BitInt(65) test_bitint_65_add_default(_BitInt(65) a, _BitInt(65) b) {
@@ -248,25 +248,25 @@ _BitInt(65) test_bitint_65_add_default(_BitInt(65) a, _BitInt(65) b) {
 // RISCV32-LABEL: define {{[^@]+}}@test_bitint_77_add_unsigned
 // RISCV32-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
 // RISCV32-NEXT:  entry:
-// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA12:![0-9]+]]
+// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10:![0-9]+]]
 // RISCV32-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i77
-// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA12]]
+// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
 // RISCV32-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i77
 // RISCV32-NEXT:    [[ADD:%.*]] = add i77 [[B]], [[A]]
 // RISCV32-NEXT:    [[STOREDV4:%.*]] = zext i77 [[ADD]] to i128
-// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA12]]
+// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
 // RISCV32-NEXT:    ret void
 //
 // RISCV32_INT128-LABEL: define {{[^@]+}}@test_bitint_77_add_unsigned
 // RISCV32_INT128-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
 // RISCV32_INT128-NEXT:  entry:
-// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA12:![0-9]+]]
+// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10:![0-9]+]]
 // RISCV32_INT128-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i77
-// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA12]]
+// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
 // RISCV32_INT128-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i77
 // RISCV32_INT128-NEXT:    [[ADD:%.*]] = add i77 [[B]], [[A]]
 // RISCV32_INT128-NEXT:    [[STOREDV4:%.*]] = zext i77 [[ADD]] to i128
-// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA12]]
+// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
 // RISCV32_INT128-NEXT:    ret void
 //
 unsigned _BitInt(77) test_bitint_77_add_unsigned(unsigned _BitInt(77) a, unsigned _BitInt(77) b) {
@@ -282,25 +282,25 @@ unsigned _BitInt(77) test_bitint_77_add_unsigned(unsigned _BitInt(77) a, unsigne
 // RISCV32-LABEL: define {{[^@]+}}@test_bitint_77_add_signed
 // RISCV32-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
 // RISCV32-NEXT:  entry:
-// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA12]]
+// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]
 // RISCV32-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i77
-// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA12]]
+// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
 // RISCV32-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i77
 // RISCV32-NEXT:    [[ADD:%.*]] = add nsw i77 [[B]], [[A]]
 // RISCV32-NEXT:    [[STOREDV4:%.*]] = sext i77 [[ADD]] to i128
-// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA12]]
+// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
 // RISCV32-NEXT:    ret void
 //
 // RISCV32_INT128-LABEL: define {{[^@]+}}@test_bitint_77_add_signed
 // RISCV32_INT128-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
 // RISCV32_INT128-NEXT:  entry:
-// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA12]]
+// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]
 // RISCV32_INT128-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i77
-// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA12]]
+// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
 // RISCV32_INT128-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i77
 // RISCV32_INT128-NEXT:    [[ADD:%.*]] = add nsw i77 [[B]], [[A]]
 // RISCV32_INT128-NEXT:    [[STOREDV4:%.*]] = sext i77 [[ADD]] to i128
-// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA12]]
+// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
 // RISCV32_INT128-NEXT:    ret void
 //
 signed _BitInt(77) test_bitint_77_add_signed(signed _BitInt(77) a, signed _BitInt(77) b) {
@@ -316,209 +316,27 @@ signed _BitInt(77) test_bitint_77_add_signed(signed _BitInt(77) a, signed _BitIn
 // RISCV32-LABEL: define {{[^@]+}}@test_bitint_77_add_default
 // RISCV32-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
 // RISCV32-NEXT:  entry:
-// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA12]]
+// RISCV32-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]
 // RISCV32-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i77
-// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA12]]
+// RISCV32-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
 // RISCV32-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i77
 // RISCV32-NEXT:    [[ADD:%.*]] = add nsw i77 [[B]], [[A]]
 // RISCV32-NEXT:    [[STOREDV4:%.*]] = sext i77 [[ADD]] to i128
-// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA12]]
+// RISCV32-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
 // RISCV32-NEXT:    ret void
 //
 // RISCV32_INT128-LABEL: define {{[^@]+}}@test_bitint_77_add_default
 // RISCV32_INT128-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i128) align 8 captures(none) initializes((0, 16)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
 // RISCV32_INT128-NEXT:  entry:
-// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA12]]
+// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i128, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]
 // RISCV32_INT128-NEXT:    [[A:%.*]] = trunc i128 [[TMP2]] to i77
-// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA12]]
+// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i128, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
 // RISCV32_INT128-NEXT:    [[B:%.*]] = trunc i128 [[TMP3]] to i77
 // RISCV32_INT128-NEXT:    [[ADD:%.*]] = add nsw i77 [[B]], [[A]]
 // RISCV32_INT128-NEXT:    [[STOREDV4:%.*]] = sext i77 [[ADD]] to i128
-// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA12]]
+// RISCV32_INT128-NEXT:    store i128 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
 // RISCV32_INT128-NEXT:    ret void
 //
 _BitInt(77) test_bitint_77_add_default(_BitInt(77) a, _BitInt(77) b) {
     return a + b;
 }
-
-// BitInt(200) tests - requires BitInt larger than 128 bits support
-
-// RISCV64-LABEL: define {{[^@]+}}@test_bitint_200_add_unsigned
-// RISCV64-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1:[0-9]+]] {
-// RISCV64-NEXT:  entry:
-// RISCV64-NEXT:    [[TMP2:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA10:![0-9]+]]
-// RISCV64-NEXT:    [[A:%.*]] = trunc i256 [[TMP2]] to i200
-// RISCV64-NEXT:    [[TMP3:%.*]] = load i256, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
-// RISCV64-NEXT:    [[B:%.*]] = trunc i256 [[TMP3]] to i200
-// RISCV64-NEXT:    [[ADD:%.*]] = add i200 [[B]], [[A]]
-// RISCV64-NEXT:    [[STOREDV4:%.*]] = zext i200 [[ADD]] to i256
-// RISCV64-NEXT:    store i256 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
-// RISCV64-NEXT:    ret void
-//
-// RISCV32-LABEL: define {{[^@]+}}@test_bitint_200_add_unsigned
-// RISCV32-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
-// RISCV32-NEXT:  entry:
-// RISCV32-NEXT:    [[TMP2:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA14:![0-9]+]]
-// RISCV32-NEXT:    [[A:%.*]] = trunc i256 [[TMP2]] to i200
-// RISCV32-NEXT:    [[TMP3:%.*]] = load i256, ptr [[TMP1]], align 8, !tbaa [[TBAA14]]
-// RISCV32-NEXT:    [[B:%.*]] = trunc i256 [[TMP3]] to i200
-// RISCV32-NEXT:    [[ADD:%.*]] = add i200 [[B]], [[A]]
-// RISCV32-NEXT:    [[STOREDV4:%.*]] = zext i200 [[ADD]] to i256
-// RISCV32-NEXT:    store i256 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA14]]
-// RISCV32-NEXT:    ret void
-//
-// RISCV32_INT128-LABEL: define {{[^@]+}}@test_bitint_200_add_unsigned
-// RISCV32_INT128-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
-// RISCV32_INT128-NEXT:  entry:
-// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA14:![0-9]+]]
-// RISCV32_INT128-NEXT:    [[A:%.*]] = trunc i256 [[TMP2]] to i200
-// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i256, ptr [[TMP1]], align 8, !tbaa [[TBAA14]]
-// RISCV32_INT128-NEXT:    [[B:%.*]] = trunc i256 [[TMP3]] to i200
-// RISCV32_INT128-NEXT:    [[ADD:%.*]] = add i200 [[B]], [[A]]
-// RISCV32_INT128-NEXT:    [[STOREDV4:%.*]] = zext i200 [[ADD]] to i256
-// RISCV32_INT128-NEXT:    store i256 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA14]]
-// RISCV32_INT128-NEXT:    ret void
-//
-unsigned _BitInt(200) test_bitint_200_add_unsigned(unsigned _BitInt(200) a, unsigned _BitInt(200) b) {
-    return a + b;
-}
-
-// RISCV64-LABEL: define {{[^@]+}}@test_bitint_200_add_signed
-// RISCV64-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
-// RISCV64-NEXT:  entry:
-// RISCV64-NEXT:    [[TMP2:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]
-// RISCV64-NEXT:    [[A:%.*]] = trunc i256 [[TMP2]] to i200
-// RISCV64-NEXT:    [[TMP3:%.*]] = load i256, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
-// RISCV64-NEXT:    [[B:%.*]] = trunc i256 [[TMP3]] to i200
-// RISCV64-NEXT:    [[ADD:%.*]] = add nsw i200 [[B]], [[A]]
-// RISCV64-NEXT:    [[STOREDV4:%.*]] = sext i200 [[ADD]] to i256
-// RISCV64-NEXT:    store i256 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
-// RISCV64-NEXT:    ret void
-//
-// RISCV32-LABEL: define {{[^@]+}}@test_bitint_200_add_signed
-// RISCV32-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
-// RISCV32-NEXT:  entry:
-// RISCV32-NEXT:    [[TMP2:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA14]]
-// RISCV32-NEXT:    [[A:%.*]] = trunc i256 [[TMP2]] to i200
-// RISCV32-NEXT:    [[TMP3:%.*]] = load i256, ptr [[TMP1]], align 8, !tbaa [[TBAA14]]
-// RISCV32-NEXT:    [[B:%.*]] = trunc i256 [[TMP3]] to i200
-// RISCV32-NEXT:    [[ADD:%.*]] = add nsw i200 [[B]], [[A]]
-// RISCV32-NEXT:    [[STOREDV4:%.*]] = sext i200 [[ADD]] to i256
-// RISCV32-NEXT:    store i256 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA14]]
-// RISCV32-NEXT:    ret void
-//
-// RISCV32_INT128-LABEL: define {{[^@]+}}@test_bitint_200_add_signed
-// RISCV32_INT128-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
-// RISCV32_INT128-NEXT:  entry:
-// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA14]]
-// RISCV32_INT128-NEXT:    [[A:%.*]] = trunc i256 [[TMP2]] to i200
-// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i256, ptr [[TMP1]], align 8, !tbaa [[TBAA14]]
-// RISCV32_INT128-NEXT:    [[B:%.*]] = trunc i256 [[TMP3]] to i200
-// RISCV32_INT128-NEXT:    [[ADD:%.*]] = add nsw i200 [[B]], [[A]]
-// RISCV32_INT128-NEXT:    [[STOREDV4:%.*]] = sext i200 [[ADD]] to i256
-// RISCV32_INT128-NEXT:    store i256 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA14]]
-// RISCV32_INT128-NEXT:    ret void
-//
-signed _BitInt(200) test_bitint_200_add_signed(signed _BitInt(200) a, signed _BitInt(200) b) {
-    return a + b;
-}
-
-// RISCV64-LABEL: define {{[^@]+}}@test_bitint_200_add_default
-// RISCV64-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
-// RISCV64-NEXT:  entry:
-// RISCV64-NEXT:    [[TMP2:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]
-// RISCV64-NEXT:    [[A:%.*]] = trunc i256 [[TMP2]] to i200
-// RISCV64-NEXT:    [[TMP3:%.*]] = load i256, ptr [[TMP1]], align 8, !tbaa [[TBAA10]]
-// RISCV64-NEXT:    [[B:%.*]] = trunc i256 [[TMP3]] to i200
-// RISCV64-NEXT:    [[ADD:%.*]] = add nsw i200 [[B]], [[A]]
-// RISCV64-NEXT:    [[STOREDV4:%.*]] = sext i200 [[ADD]] to i256
-// RISCV64-NEXT:    store i256 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
-// RISCV64-NEXT:    ret void
-//
-// RISCV32-LABEL: define {{[^@]+}}@test_bitint_200_add_default
-// RISCV32-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
-// RISCV32-NEXT:  entry:
-// RISCV32-NEXT:    [[TMP2:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA14]]
-// RISCV32-NEXT:    [[A:%.*]] = trunc i256 [[TMP2]] to i200
-// RISCV32-NEXT:    [[TMP3:%.*]] = load i256, ptr [[TMP1]], align 8, !tbaa [[TBAA14]]
-// RISCV32-NEXT:    [[B:%.*]] = trunc i256 [[TMP3]] to i200
-// RISCV32-NEXT:    [[ADD:%.*]] = add nsw i200 [[B]], [[A]]
-// RISCV32-NEXT:    [[STOREDV4:%.*]] = sext i200 [[ADD]] to i256
-// RISCV32-NEXT:    store i256 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA14]]
-// RISCV32-NEXT:    ret void
-//
-// RISCV32_INT128-LABEL: define {{[^@]+}}@test_bitint_200_add_default
-// RISCV32_INT128-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]], ptr dead_on_return noundef readonly captures(none) [[TMP1:%.*]]) local_unnamed_addr #[[ATTR1]] {
-// RISCV32_INT128-NEXT:  entry:
-// RISCV32_INT128-NEXT:    [[TMP2:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA14]]
-// RISCV32_INT128-NEXT:    [[A:%.*]] = trunc i256 [[TMP2]] to i200
-// RISCV32_INT128-NEXT:    [[TMP3:%.*]] = load i256, ptr [[TMP1]], align 8, !tbaa [[TBAA14]]
-// RISCV32_INT128-NEXT:    [[B:%.*]] = trunc i256 [[TMP3]] to i200
-// RISCV32_INT128-NEXT:    [[ADD:%.*]] = add nsw i200 [[B]], [[A]]
-// RISCV32_INT128-NEXT:    [[STOREDV4:%.*]] = sext i200 [[ADD]] to i256
-// RISCV32_INT128-NEXT:    store i256 [[STOREDV4]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA14]]
-// RISCV32_INT128-NEXT:    ret void
-//
-_BitInt(200) test_bitint_200_add_default(_BitInt(200) a, _BitInt(200) b) {
-    return a + b;
-}
-
-// Float <-> BitInt(200) conversions
-
-// RISCV64-LABEL: define {{[^@]+}}@test_bitint_200_to_float
-// RISCV64-SAME: (ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] {
-// RISCV64-NEXT:  entry:
-// RISCV64-NEXT:    [[TMP1:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA10]]
-// RISCV64-NEXT:    [[I:%.*]] = trunc i256 [[TMP1]] to i200
-// RISCV64-NEXT:    [[CONV:%.*]] = sitofp i200 [[I]] to float
-// RISCV64-NEXT:    ret float [[CONV]]
-//
-// RISCV32-LABEL: define {{[^@]+}}@test_bitint_200_to_float
-// RISCV32-SAME: (ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] {
-// RISCV32-NEXT:  entry:
-// RISCV32-NEXT:    [[TMP1:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA14]]
-// RISCV32-NEXT:    [[I:%.*]] = trunc i256 [[TMP1]] to i200
-// RISCV32-NEXT:    [[CONV:%.*]] = sitofp i200 [[I]] to float
-// RISCV32-NEXT:    ret float [[CONV]]
-//
-// RISCV32_INT128-LABEL: define {{[^@]+}}@test_bitint_200_to_float
-// RISCV32_INT128-SAME: (ptr dead_on_return noundef readonly captures(none) [[TMP0:%.*]]) local_unnamed_addr #[[ATTR2:[0-9]+]] {
-// RISCV32_INT128-NEXT:  entry:
-// RISCV32_INT128-NEXT:    [[TMP1:%.*]] = load i256, ptr [[TMP0]], align 8, !tbaa [[TBAA14]]
-// RISCV32_INT128-NEXT:    [[I:%.*]] = trunc i256 [[TMP1]] to i200
-// RISCV32_INT128-NEXT:    [[CONV:%.*]] = sitofp i200 [[I]] to float
-// RISCV32_INT128-NEXT:    ret float [[CONV]]
-//
-float test_bitint_200_to_float(_BitInt(200) i) {
-  float f = i;
-  return f;
-}
-
-// RISCV64-LABEL: define {{[^@]+}}@test_float_to_bitint_200
-// RISCV64-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], float noundef [[F:%.*]]) local_unnamed_addr #[[ATTR3:[0-9]+]] {
-// RISCV64-NEXT:  entry:
-// RISCV64-NEXT:    [[CONV:%.*]] = fptosi float [[F]] to i200
-// RISCV64-NEXT:    [[STOREDV:%.*]] = sext i200 [[CONV]] to i256
-// RISCV64-NEXT:    store i256 [[STOREDV]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA10]]
-// RISCV64-NEXT:    ret void
-//
-// RISCV32-LABEL: define {{[^@]+}}@test_float_to_bitint_200
-// RISCV32-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], float noundef [[F:%.*]]) local_unnamed_addr #[[ATTR3:[0-9]+]] {
-// RISCV32-NEXT:  entry:
-// RISCV32-NEXT:    [[CONV:%.*]] = fptosi float [[F]] to i200
-// RISCV32-NEXT:    [[STOREDV:%.*]] = sext i200 [[CONV]] to i256
-// RISCV32-NEXT:    store i256 [[STOREDV]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA14]]
-// RISCV32-NEXT:    ret void
-//
-// RISCV32_INT128-LABEL: define {{[^@]+}}@test_float_to_bitint_200
-// RISCV32_INT128-SAME: (ptr dead_on_unwind noalias writable writeonly sret(i256) align 8 captures(none) initializes((0, 32)) [[AGG_RESULT:%.*]], float noundef [[F:%.*]]) local_unnamed_addr #[[ATTR3:[0-9]+]] {
-// RISCV32_INT128-NEXT:  entry:
-// RISCV32_INT128-NEXT:    [[CONV:%.*]] = fptosi float [[F]] to i200
-// RISCV32_INT128-NEXT:    [[STOREDV:%.*]] = sext i200 [[CONV]] to i256
-// RISCV32_INT128-NEXT:    store i256 [[STOREDV]], ptr [[AGG_RESULT]], align 8, !tbaa [[TBAA14]]
-// RISCV32_INT128-NEXT:    ret void
-//
-_BitInt(200) test_float_to_bitint_200(float f) {
-  _BitInt(200) i = f;
-  return i;
-}
diff --git a/clang/test/CodeGen/ext-int-cc.c b/clang/test/CodeGen/ext-int-cc.c
index ad02adcd319f1..f845afcf1e087 100644
--- a/clang/test/CodeGen/ext-int-cc.c
+++ b/clang/test/CodeGen/ext-int-cc.c
@@ -300,6 +300,8 @@ _BitInt(129) ReturnPassing5(void) { return 0; }
 // R600-NOT: define{{.*}} void @ReturnPassing5(ptr addrspace(5) noalias sret
 // ARC-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind inreg noalias writable sret
 // XCORE-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret
+// RISCV64-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret
+// RISCV32-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret
 // WASM-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret
 // SYSTEMZ-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret
 // PPC64-NOT: define{{.*}} void @ReturnPassing5(ptr dead_on_unwind noalias writable sret
diff --git a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
index 846e181b7e5af..215c460cec206 100644
--- a/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
+++ b/llvm/lib/Target/RISCV/RISCVISelLowering.cpp
@@ -1858,8 +1858,6 @@ RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
 
   setMaxDivRemBitWidthSupported(Subtarget.is64Bit() ? 128 : 64);
 
-  setMaxLargeFPConvertBitWidthSupported(Subtarget.is64Bit() ? 128 : 64);
-
   // Disable strict node mutation.
   IsStrictFPEnabled = true;
   EnableExtLdPromotion = true;
diff --git a/llvm/test/CodeGen/RISCV/bitint-fp-conv-200.ll b/llvm/test/CodeGen/RISCV/bitint-fp-conv-200.ll
deleted file mode 100644
index 00a1ed506d1ed..0000000000000
--- a/llvm/test/CodeGen/RISCV/bitint-fp-conv-200.ll
+++ /dev/null
@@ -1,2175 +0,0 @@
-; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s | FileCheck -check-prefix=RV64 %s
-; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s | FileCheck -check-prefix=RV32 %s
-
-define void @test_bitint_200_add(ptr %a, ptr %b, ptr %out) nounwind {
-; RV64-LABEL: test_bitint_200_add:
-; RV64:       # %bb.0:
-; RV64-NEXT:    ld a4, 0(a0)
-; RV64-NEXT:    ld a5, 8(a0)
-; RV64-NEXT:    ld a3, 16(a0)
-; RV64-NEXT:    lbu a0, 24(a0)
-; RV64-NEXT:    ld t0, 8(a1)
-; RV64-NEXT:    ld t1, 0(a1)
-; RV64-NEXT:    ld a7, 16(a1)
-; RV64-NEXT:    lbu a6, 24(a1)
-; RV64-NEXT:    add t2, a5, t0
-; RV64-NEXT:    add a1, a4, t1
-; RV64-NEXT:    sltu t0, a1, a4
-; RV64-NEXT:    add a4, t2, t0
-; RV64-NEXT:    beq a4, a5, .LBB0_2
-; RV64-NEXT:  # %bb.1:
-; RV64-NEXT:    sltu t0, a4, a5
-; RV64-NEXT:  .LBB0_2:
-; RV64-NEXT:    add a7, a3, a7
-; RV64-NEXT:    add a0, a0, a6
-; RV64-NEXT:    add t0, a7, t0
-; RV64-NEXT:    sltu a3, a7, a3
-; RV64-NEXT:    sltu a5, t0, a7
-; RV64-NEXT:    add a0, a0, a3
-; RV64-NEXT:    add a0, a0, a5
-; RV64-NEXT:    sd a1, 0(a2)
-; RV64-NEXT:    sd a4, 8(a2)
-; RV64-NEXT:    sd t0, 16(a2)
-; RV64-NEXT:    sb a0, 24(a2)
-; RV64-NEXT:    ret
-;
-; RV32-LABEL: test_bitint_200_add:
-; RV32:       # %bb.0:
-; RV32-NEXT:    lw a4, 0(a0)
-; RV32-NEXT:    lw a5, 4(a0)
-; RV32-NEXT:    lw t1, 8(a0)
-; RV32-NEXT:    lw t0, 12(a0)
-; RV32-NEXT:    lw a3, 4(a1)
-; RV32-NEXT:    lw a7, 0(a1)
-; RV32-NEXT:    lw t2, 8(a1)
-; RV32-NEXT:    lw a6, 12(a1)
-; RV32-NEXT:    add t3, a5, a3
-; RV32-NEXT:    add a3, a4, a7
-; RV32-NEXT:    sltu a7, a3, a4
-; RV32-NEXT:    add a4, t3, a7
-; RV32-NEXT:    beq a4, a5, .LBB0_2
-; RV32-NEXT:  # %bb.1:
-; RV32-NEXT:    sltu a7, a4, a5
-; RV32-NEXT:  .LBB0_2:
-; RV32-NEXT:    add t2, t1, t2
-; RV32-NEXT:    add a6, t0, a6
-; RV32-NEXT:    add a5, t2, a7
-; RV32-NEXT:    sltu t3, t2, t1
-; RV32-NEXT:    sltu t2, a5, t2
-; RV32-NEXT:    add a6, a6, t3
-; RV32-NEXT:    add a6, a6, t2
-; RV32-NEXT:    beq a6, t0, .LBB0_4
-; RV32-NEXT:  # %bb.3:
-; RV32-NEXT:    sltu t4, a6, t0
-; RV32-NEXT:    j .LBB0_5
-; RV32-NEXT:  .LBB0_4:
-; RV32-NEXT:    sltu t4, a5, t1
-; RV32-NEXT:  .LBB0_5:
-; RV32-NEXT:    lw t3, 16(a0)
-; RV32-NEXT:    lw t2, 20(a0)
-; RV32-NEXT:    lw t6, 16(a1)
-; RV32-NEXT:    lw t5, 20(a1)
-; RV32-NEXT:    xor t1, a5, t1
-; RV32-NEXT:    xor t0, a6, t0
-; RV32-NEXT:    or t0, t1, t0
-; RV32-NEXT:    beqz t0, .LBB0_7
-; RV32-NEXT:  # %bb.6:
-; RV32-NEXT:    mv a7, t4
-; RV32-NEXT:  .LBB0_7:
-; RV32-NEXT:    lbu a0, 24(a0)
-; RV32-NEXT:    lbu a1, 24(a1)
-; RV32-NEXT:    add t6, t3, t6
-; RV32-NEXT:    add t4, t2, t5
-; RV32-NEXT:    add a7, t6, a7
-; RV32-NEXT:    sltu t1, t6, t3
-; RV32-NEXT:    sltu t3, a7, t6
-; RV32-NEXT:    add t4, t4, t1
-; RV32-NEXT:    add t0, t4, t3
-; RV32-NEXT:    sltu t5, t0, t4
-; RV32-NEXT:    and t3, t3, t5
-; RV32-NEXT:    beq t4, t2, .LBB0_9
-; RV32-NEXT:  # %bb.8:
-; RV32-NEXT:    sltu t1, t4, t2
-; RV32-NEXT:  .LBB0_9:
-; RV32-NEXT:    add a0, a0, a1
-; RV32-NEXT:    sw a3, 0(a2)
-; RV32-NEXT:    sw a4, 4(a2)
-; RV32-NEXT:    sw a5, 8(a2)
-; RV32-NEXT:    sw a6, 12(a2)
-; RV32-NEXT:    add a0, a0, t1
-; RV32-NEXT:    add a0, a0, t3
-; RV32-NEXT:    sw a7, 16(a2)
-; RV32-NEXT:    sw t0, 20(a2)
-; RV32-NEXT:    sb a0, 24(a2)
-; RV32-NEXT:    ret
-  %1 = load i200, ptr %a, align 8
-  %2 = load i200, ptr %b, align 8
-  %3 = add i200 %1, %2
-  store i200 %3, ptr %out, align 8
-  ret void
-}
-
-define void @test_bitint_200_to_float(ptr %in, ptr %out) nounwind {
-; RV64-LABEL: test_bitint_200_to_float:
-; RV64:       # %bb.0: # %itofp-entry
-; RV64-NEXT:    ld a2, 8(a0)
-; RV64-NEXT:    ld a5, 16(a0)
-; RV64-NEXT:    lbu a4, 24(a0)
-; RV64-NEXT:    ld a3, 0(a0)
-; RV64-NEXT:    or a0, a2, a4
-; RV64-NEXT:    or a6, a3, a5
-; RV64-NEXT:    or a0, a6, a0
-; RV64-NEXT:    beqz a0, .LBB1_20
-; RV64-NEXT:  # %bb.1: # %itofp-if-end
-; RV64-NEXT:    slli a0, a4, 56
-; RV64-NEXT:    srai a0, a0, 63
-; RV64-NEXT:    xor a6, a5, a0
-; RV64-NEXT:    xor a4, a4, a0
-; RV64-NEXT:    xor a7, a3, a0
-; RV64-NEXT:    sltu a5, a6, a0
-; RV64-NEXT:    sub a4, a4, a0
-; RV64-NEXT:    sltu a3, a7, a0
-; RV64-NEXT:    sub a5, a4, a5
-; RV64-NEXT:    xor t0, a2, a0
-; RV64-NEXT:    mv a4, a3
-; RV64-NEXT:    beqz a2, .LBB1_3
-; RV64-NEXT:  # %bb.2: # %itofp-if-end
-; RV64-NEXT:    sltu a4, t0, a0
-; RV64-NEXT:  .LBB1_3: # %itofp-if-end
-; RV64-NEXT:    sub a6, a6, a0
-; RV64-NEXT:    sub t0, t0, a0
-; RV64-NEXT:    sub a2, a7, a0
-; RV64-NEXT:    lui a7, 349525
-; RV64-NEXT:    lui t1, 209715
-; RV64-NEXT:    lui t2, 61681
-; RV64-NEXT:    sltu t3, a6, a4
-; RV64-NEXT:    sub a4, a6, a4
-; RV64-NEXT:    sub a3, t0, a3
-; RV64-NEXT:    addi a7, a7, 1365
-; RV64-NEXT:    addi t0, t1, 819
-; RV64-NEXT:    addi t1, t2, -241
-; RV64-NEXT:    sub a5, a5, t3
-; RV64-NEXT:    srli a6, a3, 8
-; RV64-NEXT:    slli t2, a4, 56
-; RV64-NEXT:    slli t3, a7, 32
-; RV64-NEXT:    or a6, t2, a6
-; RV64-NEXT:    slli t2, t0, 32
-; RV64-NEXT:    add t3, a7, t3
-; RV64-NEXT:    srli a7, a4, 8
-; RV64-NEXT:    add t2, t0, t2
-; RV64-NEXT:    slli t0, a5, 56
-; RV64-NEXT:    or a7, t0, a7
-; RV64-NEXT:    slli t0, t1, 32
-; RV64-NEXT:    add t1, t1, t0
-; RV64-NEXT:    bnez a7, .LBB1_5
-; RV64-NEXT:  # %bb.4: # %itofp-if-end
-; RV64-NEXT:    srli t0, a6, 1
-; RV64-NEXT:    or t0, a6, t0
-; RV64-NEXT:    srli t4, t0, 2
-; RV64-NEXT:    or t0, t0, t4
-; RV64-NEXT:    srli t4, t0, 4
-; RV64-NEXT:    or t0, t0, t4
-; RV64-NEXT:    srli t4, t0, 8
-; RV64-NEXT:    or t0, t0, t4
-; RV64-NEXT:    srli t4, t0, 16
-; RV64-NEXT:    or t0, t0, t4
-; RV64-NEXT:    srli t4, t0, 32
-; RV64-NEXT:    or t0, t0, t4
-; RV64-NEXT:    not t0, t0
-; RV64-NEXT:    srli t4, t0, 1
-; RV64-NEXT:    and t4, t4, t3
-; RV64-NEXT:    sub t0, t0, t4
-; RV64-NEXT:    and t4, t0, t2
-; RV64-NEXT:    srli t0, t0, 2
-; RV64-NEXT:    and t0, t0, t2
-; RV64-NEXT:    add t0, t4, t0
-; RV64-NEXT:    srli t4, t0, 4
-; RV64-NEXT:    add t0, t0, t4
-; RV64-NEXT:    and t0, t0, t1
-; RV64-NEXT:    slli t4, t0, 8
-; RV64-NEXT:    add t0, t0, t4
-; RV64-NEXT:    slli t4, t0, 16
-; RV64-NEXT:    add t0, t0, t4
-; RV64-NEXT:    slli t4, t0, 32
-; RV64-NEXT:    add t0, t0, t4
-; RV64-NEXT:    srli t0, t0, 56
-; RV64-NEXT:    addi t0, t0, 64
-; RV64-NEXT:    j .LBB1_6
-; RV64-NEXT:  .LBB1_5:
-; RV64-NEXT:    srli t0, a7, 1
-; RV64-NEXT:    or t0, a7, t0
-; RV64-NEXT:    srli t4, t0, 2
-; RV64-NEXT:    or t0, t0, t4
-; RV64-NEXT:    srli t4, t0, 4
-; RV64-NEXT:    or t0, t0, t4
-; RV64-NEXT:    srli t4, t0, 8
-; RV64-NEXT:    or t0, t0, t4
-; RV64-NEXT:    srli t4, t0, 16
-; RV64-NEXT:    or t0, t0, t4
-; RV64-NEXT:    srli t4, t0, 32
-; RV64-NEXT:    or t0, t0, t4
-; RV64-NEXT:    not t0, t0
-; RV64-NEXT:    srli t4, t0, 1
-; RV64-NEXT:    and t4, t4, t3
-; RV64-NEXT:    sub t0, t0, t4
-; RV64-NEXT:    and t4, t0, t2
-; RV64-NEXT:    srli t0, t0, 2
-; RV64-NEXT:    and t0, t0, t2
-; RV64-NEXT:    add t0, t4, t0
-; RV64-NEXT:    srli t4, t0, 4
-; RV64-NEXT:    add t0, t0, t4
-; RV64-NEXT:    and t0, t0, t1
-; RV64-NEXT:    slli t4, t0, 8
-; RV64-NEXT:    add t0, t0, t4
-; RV64-NEXT:    slli t4, t0, 16
-; RV64-NEXT:    add t0, t0, t4
-; RV64-NEXT:    slli t4, t0, 32
-; RV64-NEXT:    add t0, t0, t4
-; RV64-NEXT:    srli t0, t0, 56
-; RV64-NEXT:  .LBB1_6: # %itofp-if-end
-; RV64-NEXT:    slli t4, a3, 56
-; RV64-NEXT:    srli t5, a2, 8
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    bnez t4, .LBB1_8
-; RV64-NEXT:  # %bb.7: # %itofp-if-end
-; RV64-NEXT:    slli t4, a2, 56
-; RV64-NEXT:    srli t5, t4, 1
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    srli t5, t4, 2
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    srli t5, t4, 4
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    srli t5, t4, 8
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    srli t5, t4, 16
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    srli t5, t4, 32
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    not t4, t4
-; RV64-NEXT:    srli t5, t4, 1
-; RV64-NEXT:    and t3, t5, t3
-; RV64-NEXT:    sub t3, t4, t3
-; RV64-NEXT:    and t4, t3, t2
-; RV64-NEXT:    srli t3, t3, 2
-; RV64-NEXT:    and t2, t3, t2
-; RV64-NEXT:    add t2, t4, t2
-; RV64-NEXT:    srli t3, t2, 4
-; RV64-NEXT:    add t2, t2, t3
-; RV64-NEXT:    and t1, t2, t1
-; RV64-NEXT:    slli t2, t1, 8
-; RV64-NEXT:    add t1, t1, t2
-; RV64-NEXT:    slli t2, t1, 16
-; RV64-NEXT:    add t1, t1, t2
-; RV64-NEXT:    slli t2, t1, 32
-; RV64-NEXT:    add t1, t1, t2
-; RV64-NEXT:    srli t1, t1, 56
-; RV64-NEXT:    addi t1, t1, 64
-; RV64-NEXT:    or a6, a6, a7
-; RV64-NEXT:    beqz a6, .LBB1_9
-; RV64-NEXT:    j .LBB1_10
-; RV64-NEXT:  .LBB1_8:
-; RV64-NEXT:    srli t5, t4, 1
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    srli t5, t4, 2
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    srli t5, t4, 4
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    srli t5, t4, 8
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    srli t5, t4, 16
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    srli t5, t4, 32
-; RV64-NEXT:    or t4, t4, t5
-; RV64-NEXT:    not t4, t4
-; RV64-NEXT:    srli t5, t4, 1
-; RV64-NEXT:    and t3, t5, t3
-; RV64-NEXT:    sub t3, t4, t3
-; RV64-NEXT:    and t4, t3, t2
-; RV64-NEXT:    srli t3, t3, 2
-; RV64-NEXT:    and t2, t3, t2
-; RV64-NEXT:    add t2, t4, t2
-; RV64-NEXT:    srli t3, t2, 4
-; RV64-NEXT:    add t2, t2, t3
-; RV64-NEXT:    and t1, t2, t1
-; RV64-NEXT:    slli t2, t1, 8
-; RV64-NEXT:    add t1, t1, t2
-; RV64-NEXT:    slli t2, t1, 16
-; RV64-NEXT:    add t1, t1, t2
-; RV64-NEXT:    slli t2, t1, 32
-; RV64-NEXT:    add t1, t1, t2
-; RV64-NEXT:    srli t1, t1, 56
-; RV64-NEXT:    or a6, a6, a7
-; RV64-NEXT:    bnez a6, .LBB1_10
-; RV64-NEXT:  .LBB1_9: # %itofp-if-end
-; RV64-NEXT:    addi t0, t1, 128
-; RV64-NEXT:  .LBB1_10: # %itofp-if-end
-; RV64-NEXT:    addi sp, sp, -208
-; RV64-NEXT:    sd s0, 200(sp) # 8-byte Folded Spill
-; RV64-NEXT:    li a6, 200
-; RV64-NEXT:    li t1, 199
-; RV64-NEXT:    sub a7, a6, t0
-; RV64-NEXT:    li t2, 25
-; RV64-NEXT:    sub a6, t1, t0
-; RV64-NEXT:    blt a7, t2, .LBB1_14
-; RV64-NEXT:  # %bb.11: # %itofp-if-then4
-; RV64-NEXT:    li t1, 26
-; RV64-NEXT:    beq a7, t1, .LBB1_16
-; RV64-NEXT:  # %bb.12: # %itofp-if-then4
-; RV64-NEXT:    li t1, 25
-; RV64-NEXT:    bne a7, t1, .LBB1_15
-; RV64-NEXT:  # %bb.13: # %itofp-sw-bb
-; RV64-NEXT:    srli a4, a2, 63
-; RV64-NEXT:    slli a3, a3, 1
-; RV64-NEXT:    or a3, a3, a4
-; RV64-NEXT:    slli a2, a2, 1
-; RV64-NEXT:    j .LBB1_16
-; RV64-NEXT:  .LBB1_14: # %itofp-if-else
-; RV64-NEXT:    addi a3, t0, -176
-; RV64-NEXT:    sd a2, 160(sp)
-; RV64-NEXT:    sd zero, 128(sp)
-; RV64-NEXT:    sd zero, 136(sp)
-; RV64-NEXT:    sd zero, 144(sp)
-; RV64-NEXT:    sd zero, 152(sp)
-; RV64-NEXT:    srli a2, a3, 3
-; RV64-NEXT:    andi a2, a2, 24
-; RV64-NEXT:    addi a4, sp, 160
-; RV64-NEXT:    sub a4, a4, a2
-; RV64-NEXT:    ld a2, 0(a4)
-; RV64-NEXT:    sll a2, a2, a3
-; RV64-NEXT:    j .LBB1_19
-; RV64-NEXT:  .LBB1_15: # %itofp-sw-default
-; RV64-NEXT:    li t2, 174
-; RV64-NEXT:    sd zero, 96(sp)
-; RV64-NEXT:    sd zero, 104(sp)
-; RV64-NEXT:    sd zero, 112(sp)
-; RV64-NEXT:    sd zero, 120(sp)
-; RV64-NEXT:    zext.b t3, a5
-; RV64-NEXT:    addi t4, sp, 64
-; RV64-NEXT:    addi t1, t0, 26
-; RV64-NEXT:    addi t5, sp, 32
-; RV64-NEXT:    sub t0, t2, t0
-; RV64-NEXT:    sd a2, 64(sp)
-; RV64-NEXT:    sd a3, 72(sp)
-; RV64-NEXT:    sd a4, 80(sp)
-; RV64-NEXT:    sd t3, 88(sp)
-; RV64-NEXT:    srli t2, t1, 3
-; RV64-NEXT:    andi t3, t1, 63
-; RV64-NEXT:    srli t6, t0, 3
-; RV64-NEXT:    andi s0, t0, 63
-; RV64-NEXT:    andi t2, t2, 24
-; RV64-NEXT:    xori t3, t3, 63
-; RV64-NEXT:    andi t6, t6, 24
-; RV64-NEXT:    xori s0, s0, 63
-; RV64-NEXT:    sub t2, t5, t2
-; RV64-NEXT:    add t4, t4, t6
-; RV64-NEXT:    ld t5, 0(t4)
-; RV64-NEXT:    ld t6, 8(t4)
-; RV64-NEXT:    ld t4, 16(t4)
-; RV64-NEXT:    sd zero, 0(sp)
-; RV64-NEXT:    sd zero, 8(sp)
-; RV64-NEXT:    sd zero, 16(sp)
-; RV64-NEXT:    sd zero, 24(sp)
-; RV64-NEXT:    sd a2, 32(sp)
-; RV64-NEXT:    sd a3, 40(sp)
-; RV64-NEXT:    sd a4, 48(sp)
-; RV64-NEXT:    sd a5, 56(sp)
-; RV64-NEXT:    ld a2, 0(t2)
-; RV64-NEXT:    ld a3, 8(t2)
-; RV64-NEXT:    ld a4, 16(t2)
-; RV64-NEXT:    ld a5, 24(t2)
-; RV64-NEXT:    srl t2, t5, t0
-; RV64-NEXT:    srl t0, t6, t0
-; RV64-NEXT:    slli t4, t4, 1
-; RV64-NEXT:    slli t6, t6, 1
-; RV64-NEXT:    sll t4, t4, s0
-; RV64-NEXT:    sll t5, t6, s0
-; RV64-NEXT:    sll t6, a3, t1
-; RV64-NEXT:    or t0, t0, t4
-; RV64-NEXT:    srli t4, a2, 1
-; RV64-NEXT:    sll a5, a5, t1
-; RV64-NEXT:    or a2, a4, a2
-; RV64-NEXT:    srli a4, a4, 1
-; RV64-NEXT:    srli a3, a3, 1
-; RV64-NEXT:    or t2, t2, t5
-; RV64-NEXT:    srl t4, t4, t3
-; RV64-NEXT:    srl a4, a4, t3
-; RV64-NEXT:    sll a2, a2, t1
-; RV64-NEXT:    srl a3, a3, t3
-; RV64-NEXT:    or t1, t6, t4
-; RV64-NEXT:    or a4, a5, a4
-; RV64-NEXT:    zext.b a4, a4
-; RV64-NEXT:    or a4, t1, a4
-; RV64-NEXT:    or a2, a2, a3
-; RV64-NEXT:    or a2, a2, a4
-; RV64-NEXT:    snez a2, a2
-; RV64-NEXT:    or a2, t2, a2
-; RV64-NEXT:    mv a3, t0
-; RV64-NEXT:  .LBB1_16: # %itofp-sw-epilog
-; RV64-NEXT:    slli a4, a2, 61
-; RV64-NEXT:    srli a4, a4, 63
-; RV64-NEXT:    or a2, a2, a4
-; RV64-NEXT:    addi a2, a2, 1
-; RV64-NEXT:    seqz a4, a2
-; RV64-NEXT:    slli a5, a2, 37
-; RV64-NEXT:    add a3, a3, a4
-; RV64-NEXT:    bltz a5, .LBB1_18
-; RV64-NEXT:  # %bb.17:
-; RV64-NEXT:    srli a2, a2, 2
-; RV64-NEXT:    slli a3, a3, 62
-; RV64-NEXT:    or a2, a2, a3
-; RV64-NEXT:    j .LBB1_19
-; RV64-NEXT:  .LBB1_18: # %itofp-if-then20
-; RV64-NEXT:    srli a2, a2, 3
-; RV64-NEXT:    slli a3, a3, 61
-; RV64-NEXT:    or a2, a2, a3
-; RV64-NEXT:    mv a6, a7
-; RV64-NEXT:  .LBB1_19: # %itofp-if-end26
-; RV64-NEXT:    lui a3, 524288
-; RV64-NEXT:    slli a6, a6, 23
-; RV64-NEXT:    and a0, a0, a3
-; RV64-NEXT:    lui a3, 260096
-; RV64-NEXT:    slli a2, a2, 41
-; RV64-NEXT:    add a3, a6, a3
-; RV64-NEXT:    srli a2, a2, 41
-; RV64-NEXT:    or a0, a0, a3
-; RV64-NEXT:    or a0, a2, a0
-; RV64-NEXT:    ld s0, 200(sp) # 8-byte Folded Reload
-; RV64-NEXT:    addi sp, sp, 208
-; RV64-NEXT:  .LBB1_20: # %itofp-return
-; RV64-NEXT:    sw a0, 0(a1)
-; RV64-NEXT:    ret
-;
-; RV32-LABEL: test_bitint_200_to_float:
-; RV32:       # %bb.0: # %itofp-entry
-; RV32-NEXT:    lw a6, 16(a0)
-; RV32-NEXT:    lw a3, 20(a0)
-; RV32-NEXT:    lbu a2, 24(a0)
-; RV32-NEXT:    lw t3, 8(a0)
-; RV32-NEXT:    lw a7, 0(a0)
-; RV32-NEXT:    lw t5, 4(a0)
-; RV32-NEXT:    lw t4, 12(a0)
-; RV32-NEXT:    or a0, t3, a2
-; RV32-NEXT:    or a4, a7, a6
-; RV32-NEXT:    or a0, a4, a0
-; RV32-NEXT:    or a4, t5, a3
-; RV32-NEXT:    or a4, a4, t4
-; RV32-NEXT:    or a0, a0, a4
-; RV32-NEXT:    beqz a0, .LBB1_35
-; RV32-NEXT:  # %bb.1: # %itofp-if-end
-; RV32-NEXT:    addi sp, sp, -224
-; RV32-NEXT:    sw s0, 220(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s1, 216(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s2, 212(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s3, 208(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s4, 204(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s5, 200(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s6, 196(sp) # 4-byte Folded Spill
-; RV32-NEXT:    slli a0, a2, 24
-; RV32-NEXT:    srai s0, a0, 31
-; RV32-NEXT:    srai a0, a0, 24
-; RV32-NEXT:    slli a4, s0, 25
-; RV32-NEXT:    srli a0, a0, 7
-; RV32-NEXT:    xor a5, t3, s0
-; RV32-NEXT:    or a0, a0, a4
-; RV32-NEXT:    sltu a4, a5, s0
-; RV32-NEXT:    xor t2, t4, s0
-; RV32-NEXT:    mv t6, a4
-; RV32-NEXT:    beqz t4, .LBB1_3
-; RV32-NEXT:  # %bb.2: # %itofp-if-end
-; RV32-NEXT:    sltu t6, t2, s0
-; RV32-NEXT:  .LBB1_3: # %itofp-if-end
-; RV32-NEXT:    xor t1, a7, a0
-; RV32-NEXT:    sltu t0, t1, a0
-; RV32-NEXT:    xor s1, t5, s0
-; RV32-NEXT:    mv a7, t0
-; RV32-NEXT:    beqz t5, .LBB1_5
-; RV32-NEXT:  # %bb.4: # %itofp-if-end
-; RV32-NEXT:    sltu a7, s1, s0
-; RV32-NEXT:  .LBB1_5: # %itofp-if-end
-; RV32-NEXT:    or t3, t3, t4
-; RV32-NEXT:    mv t4, a7
-; RV32-NEXT:    beqz t3, .LBB1_7
-; RV32-NEXT:  # %bb.6: # %itofp-if-end
-; RV32-NEXT:    mv t4, t6
-; RV32-NEXT:  .LBB1_7: # %itofp-if-end
-; RV32-NEXT:    xor a6, a6, s0
-; RV32-NEXT:    xor s3, a3, s0
-; RV32-NEXT:    sub t5, a6, s0
-; RV32-NEXT:    sltu t3, a6, s0
-; RV32-NEXT:    sub a6, s3, s0
-; RV32-NEXT:    sltu t6, t5, t4
-; RV32-NEXT:    sub s2, a6, t3
-; RV32-NEXT:    snez a6, s2
-; RV32-NEXT:    addi a6, a6, -1
-; RV32-NEXT:    and a6, a6, t6
-; RV32-NEXT:    beqz a3, .LBB1_9
-; RV32-NEXT:  # %bb.8: # %itofp-if-end
-; RV32-NEXT:    sltu t3, s3, s0
-; RV32-NEXT:  .LBB1_9: # %itofp-if-end
-; RV32-NEXT:    xor s3, a2, s0
-; RV32-NEXT:    sub t2, t2, s0
-; RV32-NEXT:    sub a5, a5, s0
-; RV32-NEXT:    sub a2, s2, t6
-; RV32-NEXT:    sub a3, t5, t4
-; RV32-NEXT:    lui t4, 349525
-; RV32-NEXT:    lui t6, 209715
-; RV32-NEXT:    sub t2, t2, a4
-; RV32-NEXT:    sltu t5, a5, a7
-; RV32-NEXT:    sub a4, a5, a7
-; RV32-NEXT:    lui s2, 61681
-; RV32-NEXT:    sub a5, s3, s0
-; RV32-NEXT:    sub a7, a5, t3
-; RV32-NEXT:    srli t3, a3, 8
-; RV32-NEXT:    sub a5, t2, t5
-; RV32-NEXT:    slli t2, a2, 24
-; RV32-NEXT:    addi t5, t4, 1365
-; RV32-NEXT:    addi t4, t6, 819
-; RV32-NEXT:    or t2, t3, t2
-; RV32-NEXT:    sub a7, a7, a6
-; RV32-NEXT:    srli a6, a2, 8
-; RV32-NEXT:    slli t3, a7, 24
-; RV32-NEXT:    or t3, t3, a6
-; RV32-NEXT:    addi t6, s2, -241
-; RV32-NEXT:    bnez t3, .LBB1_11
-; RV32-NEXT:  # %bb.10: # %itofp-if-end
-; RV32-NEXT:    srli a6, t2, 1
-; RV32-NEXT:    or a6, t2, a6
-; RV32-NEXT:    srli s2, a6, 2
-; RV32-NEXT:    or a6, a6, s2
-; RV32-NEXT:    srli s2, a6, 4
-; RV32-NEXT:    or a6, a6, s2
-; RV32-NEXT:    srli s2, a6, 8
-; RV32-NEXT:    or a6, a6, s2
-; RV32-NEXT:    srli s2, a6, 16
-; RV32-NEXT:    or a6, a6, s2
-; RV32-NEXT:    not a6, a6
-; RV32-NEXT:    srli s2, a6, 1
-; RV32-NEXT:    and s2, s2, t5
-; RV32-NEXT:    sub a6, a6, s2
-; RV32-NEXT:    and s2, a6, t4
-; RV32-NEXT:    srli a6, a6, 2
-; RV32-NEXT:    and a6, a6, t4
-; RV32-NEXT:    add a6, s2, a6
-; RV32-NEXT:    srli s2, a6, 4
-; RV32-NEXT:    add a6, a6, s2
-; RV32-NEXT:    and a6, a6, t6
-; RV32-NEXT:    slli s2, a6, 8
-; RV32-NEXT:    add a6, a6, s2
-; RV32-NEXT:    slli s2, a6, 16
-; RV32-NEXT:    add a6, a6, s2
-; RV32-NEXT:    srli a6, a6, 24
-; RV32-NEXT:    addi a6, a6, 32
-; RV32-NEXT:    j .LBB1_12
-; RV32-NEXT:  .LBB1_11:
-; RV32-NEXT:    srli a6, t3, 1
-; RV32-NEXT:    or a6, t3, a6
-; RV32-NEXT:    srli s2, a6, 2
-; RV32-NEXT:    or a6, a6, s2
-; RV32-NEXT:    srli s2, a6, 4
-; RV32-NEXT:    or a6, a6, s2
-; RV32-NEXT:    srli s2, a6, 8
-; RV32-NEXT:    or a6, a6, s2
-; RV32-NEXT:    srli s2, a6, 16
-; RV32-NEXT:    or a6, a6, s2
-; RV32-NEXT:    not a6, a6
-; RV32-NEXT:    srli s2, a6, 1
-; RV32-NEXT:    and s2, s2, t5
-; RV32-NEXT:    sub a6, a6, s2
-; RV32-NEXT:    and s2, a6, t4
-; RV32-NEXT:    srli a6, a6, 2
-; RV32-NEXT:    and a6, a6, t4
-; RV32-NEXT:    add a6, s2, a6
-; RV32-NEXT:    srli s2, a6, 4
-; RV32-NEXT:    add a6, a6, s2
-; RV32-NEXT:    and a6, a6, t6
-; RV32-NEXT:    slli s2, a6, 8
-; RV32-NEXT:    add a6, a6, s2
-; RV32-NEXT:    slli s2, a6, 16
-; RV32-NEXT:    add a6, a6, s2
-; RV32-NEXT:    srli a6, a6, 24
-; RV32-NEXT:  .LBB1_12: # %itofp-if-end
-; RV32-NEXT:    sub s2, s1, s0
-; RV32-NEXT:    srli s0, a5, 8
-; RV32-NEXT:    slli s1, a3, 24
-; RV32-NEXT:    slli s3, a5, 24
-; RV32-NEXT:    or s0, s1, s0
-; RV32-NEXT:    srli s1, a4, 8
-; RV32-NEXT:    or s1, s1, s3
-; RV32-NEXT:    bnez s0, .LBB1_14
-; RV32-NEXT:  # %bb.13: # %itofp-if-end
-; RV32-NEXT:    srli s3, s1, 1
-; RV32-NEXT:    or s3, s1, s3
-; RV32-NEXT:    srli s4, s3, 2
-; RV32-NEXT:    or s3, s3, s4
-; RV32-NEXT:    srli s4, s3, 4
-; RV32-NEXT:    or s3, s3, s4
-; RV32-NEXT:    srli s4, s3, 8
-; RV32-NEXT:    or s3, s3, s4
-; RV32-NEXT:    srli s4, s3, 16
-; RV32-NEXT:    or s3, s3, s4
-; RV32-NEXT:    not s3, s3
-; RV32-NEXT:    srli s4, s3, 1
-; RV32-NEXT:    and s4, s4, t5
-; RV32-NEXT:    sub s3, s3, s4
-; RV32-NEXT:    and s4, s3, t4
-; RV32-NEXT:    srli s3, s3, 2
-; RV32-NEXT:    and s3, s3, t4
-; RV32-NEXT:    add s3, s4, s3
-; RV32-NEXT:    srli s4, s3, 4
-; RV32-NEXT:    add s3, s3, s4
-; RV32-NEXT:    and s3, s3, t6
-; RV32-NEXT:    slli s4, s3, 8
-; RV32-NEXT:    add s3, s3, s4
-; RV32-NEXT:    slli s4, s3, 16
-; RV32-NEXT:    add s3, s3, s4
-; RV32-NEXT:    srli s3, s3, 24
-; RV32-NEXT:    addi s3, s3, 32
-; RV32-NEXT:    j .LBB1_15
-; RV32-NEXT:  .LBB1_14:
-; RV32-NEXT:    srli s3, s0, 1
-; RV32-NEXT:    or s3, s0, s3
-; RV32-NEXT:    srli s4, s3, 2
-; RV32-NEXT:    or s3, s3, s4
-; RV32-NEXT:    srli s4, s3, 4
-; RV32-NEXT:    or s3, s3, s4
-; RV32-NEXT:    srli s4, s3, 8
-; RV32-NEXT:    or s3, s3, s4
-; RV32-NEXT:    srli s4, s3, 16
-; RV32-NEXT:    or s3, s3, s4
-; RV32-NEXT:    not s3, s3
-; RV32-NEXT:    srli s4, s3, 1
-; RV32-NEXT:    and s4, s4, t5
-; RV32-NEXT:    sub s3, s3, s4
-; RV32-NEXT:    and s4, s3, t4
-; RV32-NEXT:    srli s3, s3, 2
-; RV32-NEXT:    and s3, s3, t4
-; RV32-NEXT:    add s3, s4, s3
-; RV32-NEXT:    srli s4, s3, 4
-; RV32-NEXT:    add s3, s3, s4
-; RV32-NEXT:    and s3, s3, t6
-; RV32-NEXT:    slli s4, s3, 8
-; RV32-NEXT:    add s3, s3, s4
-; RV32-NEXT:    slli s4, s3, 16
-; RV32-NEXT:    add s3, s3, s4
-; RV32-NEXT:    srli s3, s3, 24
-; RV32-NEXT:  .LBB1_15: # %itofp-if-end
-; RV32-NEXT:    sub t0, s2, t0
-; RV32-NEXT:    or s2, t2, t3
-; RV32-NEXT:    sub t1, t1, a0
-; RV32-NEXT:    bnez s2, .LBB1_17
-; RV32-NEXT:  # %bb.16: # %itofp-if-end
-; RV32-NEXT:    addi a6, s3, 64
-; RV32-NEXT:  .LBB1_17: # %itofp-if-end
-; RV32-NEXT:    srli s3, t1, 8
-; RV32-NEXT:    srli s2, t0, 8
-; RV32-NEXT:    slli s4, a4, 24
-; RV32-NEXT:    or s2, s4, s2
-; RV32-NEXT:    slli s4, t0, 24
-; RV32-NEXT:    or s3, s3, s4
-; RV32-NEXT:    bnez s2, .LBB1_20
-; RV32-NEXT:  # %bb.18: # %itofp-if-end
-; RV32-NEXT:    srli s4, s3, 1
-; RV32-NEXT:    or s4, s3, s4
-; RV32-NEXT:    srli s5, s4, 2
-; RV32-NEXT:    or s4, s4, s5
-; RV32-NEXT:    srli s5, s4, 4
-; RV32-NEXT:    or s4, s4, s5
-; RV32-NEXT:    srli s5, s4, 8
-; RV32-NEXT:    or s4, s4, s5
-; RV32-NEXT:    srli s5, s4, 16
-; RV32-NEXT:    or s4, s4, s5
-; RV32-NEXT:    not s4, s4
-; RV32-NEXT:    srli s5, s4, 1
-; RV32-NEXT:    and s5, s5, t5
-; RV32-NEXT:    sub s4, s4, s5
-; RV32-NEXT:    and s5, s4, t4
-; RV32-NEXT:    srli s4, s4, 2
-; RV32-NEXT:    and s4, s4, t4
-; RV32-NEXT:    add s4, s5, s4
-; RV32-NEXT:    srli s5, s4, 4
-; RV32-NEXT:    add s4, s4, s5
-; RV32-NEXT:    and s4, s4, t6
-; RV32-NEXT:    slli s5, s4, 8
-; RV32-NEXT:    add s4, s4, s5
-; RV32-NEXT:    slli s5, s4, 16
-; RV32-NEXT:    add s4, s4, s5
-; RV32-NEXT:    srli s4, s4, 24
-; RV32-NEXT:    addi s4, s4, 32
-; RV32-NEXT:    slli s5, t1, 24
-; RV32-NEXT:    beqz s5, .LBB1_21
-; RV32-NEXT:  .LBB1_19:
-; RV32-NEXT:    srli s6, s5, 1
-; RV32-NEXT:    or s5, s5, s6
-; RV32-NEXT:    srli s6, s5, 2
-; RV32-NEXT:    or s5, s5, s6
-; RV32-NEXT:    srli s6, s5, 4
-; RV32-NEXT:    or s5, s5, s6
-; RV32-NEXT:    srli s6, s5, 8
-; RV32-NEXT:    or s5, s5, s6
-; RV32-NEXT:    srli s6, s5, 16
-; RV32-NEXT:    or s5, s5, s6
-; RV32-NEXT:    not s5, s5
-; RV32-NEXT:    srli s6, s5, 1
-; RV32-NEXT:    and t5, s6, t5
-; RV32-NEXT:    sub t5, s5, t5
-; RV32-NEXT:    and s5, t5, t4
-; RV32-NEXT:    srli t5, t5, 2
-; RV32-NEXT:    and t4, t5, t4
-; RV32-NEXT:    add t4, s5, t4
-; RV32-NEXT:    srli t5, t4, 4
-; RV32-NEXT:    add t4, t4, t5
-; RV32-NEXT:    and t4, t4, t6
-; RV32-NEXT:    slli t5, t4, 8
-; RV32-NEXT:    add t4, t4, t5
-; RV32-NEXT:    slli t5, t4, 16
-; RV32-NEXT:    add t4, t4, t5
-; RV32-NEXT:    srli t4, t4, 24
-; RV32-NEXT:    or t5, s3, s2
-; RV32-NEXT:    beqz t5, .LBB1_22
-; RV32-NEXT:    j .LBB1_23
-; RV32-NEXT:  .LBB1_20:
-; RV32-NEXT:    srli s4, s2, 1
-; RV32-NEXT:    or s4, s2, s4
-; RV32-NEXT:    srli s5, s4, 2
-; RV32-NEXT:    or s4, s4, s5
-; RV32-NEXT:    srli s5, s4, 4
-; RV32-NEXT:    or s4, s4, s5
-; RV32-NEXT:    srli s5, s4, 8
-; RV32-NEXT:    or s4, s4, s5
-; RV32-NEXT:    srli s5, s4, 16
-; RV32-NEXT:    or s4, s4, s5
-; RV32-NEXT:    not s4, s4
-; RV32-NEXT:    srli s5, s4, 1
-; RV32-NEXT:    and s5, s5, t5
-; RV32-NEXT:    sub s4, s4, s5
-; RV32-NEXT:    and s5, s4, t4
-; RV32-NEXT:    srli s4, s4, 2
-; RV32-NEXT:    and s4, s4, t4
-; RV32-NEXT:    add s4, s5, s4
-; RV32-NEXT:    srli s5, s4, 4
-; RV32-NEXT:    add s4, s4, s5
-; RV32-NEXT:    and s4, s4, t6
-; RV32-NEXT:    slli s5, s4, 8
-; RV32-NEXT:    add s4, s4, s5
-; RV32-NEXT:    slli s5, s4, 16
-; RV32-NEXT:    add s4, s4, s5
-; RV32-NEXT:    srli s4, s4, 24
-; RV32-NEXT:    slli s5, t1, 24
-; RV32-NEXT:    bnez s5, .LBB1_19
-; RV32-NEXT:  .LBB1_21: # %itofp-if-end
-; RV32-NEXT:    li t4, 64
-; RV32-NEXT:    or t5, s3, s2
-; RV32-NEXT:    bnez t5, .LBB1_23
-; RV32-NEXT:  .LBB1_22: # %itofp-if-end
-; RV32-NEXT:    addi s4, t4, 64
-; RV32-NEXT:  .LBB1_23: # %itofp-if-end
-; RV32-NEXT:    or t3, s0, t3
-; RV32-NEXT:    or t2, s1, t2
-; RV32-NEXT:    or t2, t2, t3
-; RV32-NEXT:    bnez t2, .LBB1_25
-; RV32-NEXT:  # %bb.24: # %itofp-if-end
-; RV32-NEXT:    addi a6, s4, 128
-; RV32-NEXT:  .LBB1_25: # %itofp-if-end
-; RV32-NEXT:    li t2, 200
-; RV32-NEXT:    li t4, 199
-; RV32-NEXT:    sub t3, t2, a6
-; RV32-NEXT:    li t5, 25
-; RV32-NEXT:    sub t2, t4, a6
-; RV32-NEXT:    blt t3, t5, .LBB1_29
-; RV32-NEXT:  # %bb.26: # %itofp-if-then4
-; RV32-NEXT:    li t4, 26
-; RV32-NEXT:    beq t3, t4, .LBB1_31
-; RV32-NEXT:  # %bb.27: # %itofp-if-then4
-; RV32-NEXT:    li t4, 25
-; RV32-NEXT:    bne t3, t4, .LBB1_30
-; RV32-NEXT:  # %bb.28: # %itofp-sw-bb
-; RV32-NEXT:    srli a2, t1, 31
-; RV32-NEXT:    slli t0, t0, 1
-; RV32-NEXT:    or t0, t0, a2
-; RV32-NEXT:    slli t1, t1, 1
-; RV32-NEXT:    j .LBB1_31
-; RV32-NEXT:  .LBB1_29: # %itofp-if-else
-; RV32-NEXT:    addi a2, a6, -176
-; RV32-NEXT:    sw t1, 160(sp)
-; RV32-NEXT:    sw zero, 144(sp)
-; RV32-NEXT:    sw zero, 148(sp)
-; RV32-NEXT:    sw zero, 152(sp)
-; RV32-NEXT:    sw zero, 156(sp)
-; RV32-NEXT:    sw zero, 128(sp)
-; RV32-NEXT:    sw zero, 132(sp)
-; RV32-NEXT:    sw zero, 136(sp)
-; RV32-NEXT:    sw zero, 140(sp)
-; RV32-NEXT:    srli a3, a2, 3
-; RV32-NEXT:    andi a3, a3, 28
-; RV32-NEXT:    addi a4, sp, 160
-; RV32-NEXT:    sub a4, a4, a3
-; RV32-NEXT:    lw a3, 0(a4)
-; RV32-NEXT:    sll a2, a3, a2
-; RV32-NEXT:    j .LBB1_34
-; RV32-NEXT:  .LBB1_30: # %itofp-sw-default
-; RV32-NEXT:    zext.b a7, a7
-; RV32-NEXT:    li t5, 174
-; RV32-NEXT:    sw zero, 112(sp)
-; RV32-NEXT:    sw zero, 116(sp)
-; RV32-NEXT:    sw zero, 120(sp)
-; RV32-NEXT:    sw zero, 124(sp)
-; RV32-NEXT:    sw zero, 96(sp)
-; RV32-NEXT:    sw zero, 100(sp)
-; RV32-NEXT:    sw zero, 104(sp)
-; RV32-NEXT:    sw zero, 108(sp)
-; RV32-NEXT:    sw t1, 64(sp)
-; RV32-NEXT:    sw t0, 68(sp)
-; RV32-NEXT:    sw a4, 72(sp)
-; RV32-NEXT:    sw a5, 76(sp)
-; RV32-NEXT:    addi t6, sp, 64
-; RV32-NEXT:    addi t4, a6, 26
-; RV32-NEXT:    addi s0, sp, 32
-; RV32-NEXT:    sub t5, t5, a6
-; RV32-NEXT:    sw a3, 80(sp)
-; RV32-NEXT:    sw a2, 84(sp)
-; RV32-NEXT:    sw a7, 88(sp)
-; RV32-NEXT:    sw zero, 92(sp)
-; RV32-NEXT:    srli a6, t4, 3
-; RV32-NEXT:    andi s1, t4, 31
-; RV32-NEXT:    srli s2, t5, 3
-; RV32-NEXT:    andi s3, t5, 31
-; RV32-NEXT:    andi s4, a6, 28
-; RV32-NEXT:    xori a6, s1, 31
-; RV32-NEXT:    andi s1, s2, 28
-; RV32-NEXT:    xori s2, s3, 31
-; RV32-NEXT:    sub s0, s0, s4
-; RV32-NEXT:    add t6, t6, s1
-; RV32-NEXT:    lw s1, 0(t6)
-; RV32-NEXT:    lw s3, 4(t6)
-; RV32-NEXT:    lw t6, 8(t6)
-; RV32-NEXT:    sw zero, 16(sp)
-; RV32-NEXT:    sw zero, 20(sp)
-; RV32-NEXT:    sw zero, 24(sp)
-; RV32-NEXT:    sw zero, 28(sp)
-; RV32-NEXT:    sw zero, 0(sp)
-; RV32-NEXT:    sw zero, 4(sp)
-; RV32-NEXT:    sw zero, 8(sp)
-; RV32-NEXT:    sw zero, 12(sp)
-; RV32-NEXT:    sw t1, 32(sp)
-; RV32-NEXT:    sw t0, 36(sp)
-; RV32-NEXT:    sw a4, 40(sp)
-; RV32-NEXT:    sw a5, 44(sp)
-; RV32-NEXT:    sw a3, 48(sp)
-; RV32-NEXT:    sw a2, 52(sp)
-; RV32-NEXT:    sw a7, 56(sp)
-; RV32-NEXT:    lw a2, 0(s0)
-; RV32-NEXT:    lw a3, 4(s0)
-; RV32-NEXT:    lw a4, 8(s0)
-; RV32-NEXT:    lw a5, 12(s0)
-; RV32-NEXT:    lw a7, 16(s0)
-; RV32-NEXT:    lw t0, 20(s0)
-; RV32-NEXT:    lw t1, 24(s0)
-; RV32-NEXT:    srl s0, s1, t5
-; RV32-NEXT:    srl t5, s3, t5
-; RV32-NEXT:    slli t6, t6, 1
-; RV32-NEXT:    slli s3, s3, 1
-; RV32-NEXT:    sll t6, t6, s2
-; RV32-NEXT:    sll s1, s3, s2
-; RV32-NEXT:    or s2, a3, t0
-; RV32-NEXT:    or a2, a7, a2
-; RV32-NEXT:    sll a7, a4, t4
-; RV32-NEXT:    srli a3, a3, 1
-; RV32-NEXT:    sll t1, t1, t4
-; RV32-NEXT:    srli t0, t0, 1
-; RV32-NEXT:    or t5, t5, t6
-; RV32-NEXT:    srli t6, a5, 1
-; RV32-NEXT:    or s0, s0, s1
-; RV32-NEXT:    or a5, s2, a5
-; RV32-NEXT:    or a4, a2, a4
-; RV32-NEXT:    srl a3, a3, a6
-; RV32-NEXT:    srl t0, t0, a6
-; RV32-NEXT:    sll a2, a2, t4
-; RV32-NEXT:    srl t6, t6, a6
-; RV32-NEXT:    sll a5, a5, t4
-; RV32-NEXT:    srli a4, a4, 1
-; RV32-NEXT:    or a3, a7, a3
-; RV32-NEXT:    or a7, t1, t0
-; RV32-NEXT:    srl a4, a4, a6
-; RV32-NEXT:    zext.b a6, a7
-; RV32-NEXT:    or a4, a4, a5
-; RV32-NEXT:    or a3, a3, a6
-; RV32-NEXT:    or a2, a2, t6
-; RV32-NEXT:    or a2, a2, a3
-; RV32-NEXT:    or a2, a2, a4
-; RV32-NEXT:    snez a2, a2
-; RV32-NEXT:    or t1, s0, a2
-; RV32-NEXT:    mv t0, t5
-; RV32-NEXT:  .LBB1_31: # %itofp-sw-epilog
-; RV32-NEXT:    slli a2, t1, 29
-; RV32-NEXT:    srli a2, a2, 31
-; RV32-NEXT:    or a2, t1, a2
-; RV32-NEXT:    addi a2, a2, 1
-; RV32-NEXT:    seqz a3, a2
-; RV32-NEXT:    slli a4, a2, 5
-; RV32-NEXT:    add t0, t0, a3
-; RV32-NEXT:    bltz a4, .LBB1_33
-; RV32-NEXT:  # %bb.32:
-; RV32-NEXT:    srli a2, a2, 2
-; RV32-NEXT:    slli t0, t0, 30
-; RV32-NEXT:    or a2, a2, t0
-; RV32-NEXT:    j .LBB1_34
-; RV32-NEXT:  .LBB1_33: # %itofp-if-then20
-; RV32-NEXT:    srli a2, a2, 3
-; RV32-NEXT:    slli t0, t0, 29
-; RV32-NEXT:    or a2, a2, t0
-; RV32-NEXT:    mv t2, t3
-; RV32-NEXT:  .LBB1_34: # %itofp-if-end26
-; RV32-NEXT:    lui a3, 524288
-; RV32-NEXT:    slli t2, t2, 23
-; RV32-NEXT:    and a0, a0, a3
-; RV32-NEXT:    lui a3, 260096
-; RV32-NEXT:    slli a2, a2, 9
-; RV32-NEXT:    add a3, t2, a3
-; RV32-NEXT:    srli a2, a2, 9
-; RV32-NEXT:    or a0, a0, a3
-; RV32-NEXT:    or a0, a2, a0
-; RV32-NEXT:    lw s0, 220(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s1, 216(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s2, 212(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s3, 208(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s4, 204(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s5, 200(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s6, 196(sp) # 4-byte Folded Reload
-; RV32-NEXT:    addi sp, sp, 224
-; RV32-NEXT:  .LBB1_35: # %itofp-return
-; RV32-NEXT:    sw a0, 0(a1)
-; RV32-NEXT:    ret
-  %1 = load i200, ptr %in, align 8
-  %2 = sitofp i200 %1 to float
-  store float %2, ptr %out, align 4
-  ret void
-}
-
-define void @test_float_to_bitint_200(ptr %in, ptr %out) nounwind {
-; RV64-LABEL: test_float_to_bitint_200:
-; RV64:       # %bb.0: # %fp-to-i-entry
-; RV64-NEXT:    addi sp, sp, -256
-; RV64-NEXT:    sd ra, 248(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s0, 240(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s1, 232(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s2, 224(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s3, 216(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s4, 208(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s5, 200(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s6, 192(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s7, 184(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s8, 176(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s9, 168(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s10, 160(sp) # 8-byte Folded Spill
-; RV64-NEXT:    sd s11, 152(sp) # 8-byte Folded Spill
-; RV64-NEXT:    lw s0, 0(a0)
-; RV64-NEXT:    slli a0, s0, 33
-; RV64-NEXT:    srli a0, a0, 56
-; RV64-NEXT:    li a2, 127
-; RV64-NEXT:    bgeu a0, a2, .LBB2_2
-; RV64-NEXT:  # %bb.1:
-; RV64-NEXT:    li s2, 0
-; RV64-NEXT:    li s10, 0
-; RV64-NEXT:    li a0, 0
-; RV64-NEXT:    li a2, 0
-; RV64-NEXT:    j .LBB2_10
-; RV64-NEXT:  .LBB2_2: # %fp-to-i-if-end
-; RV64-NEXT:    addi a2, a0, -327
-; RV64-NEXT:    sltu a3, a2, a0
-; RV64-NEXT:    addi a4, a3, -1
-; RV64-NEXT:    zext.b a4, a4
-; RV64-NEXT:    neg a5, a3
-; RV64-NEXT:    xori a6, a4, 255
-; RV64-NEXT:    or a5, a5, a6
-; RV64-NEXT:    beqz a5, .LBB2_6
-; RV64-NEXT:  # %bb.3: # %fp-to-i-if-end
-; RV64-NEXT:    sltiu a2, a4, 256
-; RV64-NEXT:    bnez a2, .LBB2_7
-; RV64-NEXT:  .LBB2_4: # %fp-to-i-if-end9
-; RV64-NEXT:    sd a1, 8(sp) # 8-byte Folded Spill
-; RV64-NEXT:    slli a1, s0, 41
-; RV64-NEXT:    srai s0, s0, 63
-; RV64-NEXT:    lui a2, 2048
-; RV64-NEXT:    li a3, 149
-; RV64-NEXT:    srli a1, a1, 41
-; RV64-NEXT:    or a1, a1, a2
-; RV64-NEXT:    ori s8, s0, 1
-; RV64-NEXT:    bltu a3, a0, .LBB2_8
-; RV64-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV64-NEXT:    sd zero, 48(sp)
-; RV64-NEXT:    sd zero, 56(sp)
-; RV64-NEXT:    sd zero, 64(sp)
-; RV64-NEXT:    sd zero, 72(sp)
-; RV64-NEXT:    sd a1, 16(sp)
-; RV64-NEXT:    sd zero, 24(sp)
-; RV64-NEXT:    sd zero, 32(sp)
-; RV64-NEXT:    sd zero, 40(sp)
-; RV64-NEXT:    li a1, 150
-; RV64-NEXT:    addi a2, sp, 16
-; RV64-NEXT:    sub a1, a1, a0
-; RV64-NEXT:    srli a0, a1, 3
-; RV64-NEXT:    andi a0, a0, 24
-; RV64-NEXT:    add a0, a2, a0
-; RV64-NEXT:    ld a2, 8(a0)
-; RV64-NEXT:    ld a3, 16(a0)
-; RV64-NEXT:    ld a4, 24(a0)
-; RV64-NEXT:    ld a0, 0(a0)
-; RV64-NEXT:    andi a5, a1, 63
-; RV64-NEXT:    xori a5, a5, 63
-; RV64-NEXT:    slli a6, a4, 1
-; RV64-NEXT:    slli a7, a3, 1
-; RV64-NEXT:    slli t0, a2, 1
-; RV64-NEXT:    sll a6, a6, a5
-; RV64-NEXT:    sll a7, a7, a5
-; RV64-NEXT:    sll a5, t0, a5
-; RV64-NEXT:    srl a3, a3, a1
-; RV64-NEXT:    srl a2, a2, a1
-; RV64-NEXT:    srl a0, a0, a1
-; RV64-NEXT:    or a3, a3, a6
-; RV64-NEXT:    sd a3, 0(sp) # 8-byte Folded Spill
-; RV64-NEXT:    or s5, a2, a7
-; RV64-NEXT:    or s6, a0, a5
-; RV64-NEXT:    srl s4, a4, a1
-; RV64-NEXT:    mv a0, s6
-; RV64-NEXT:    li a1, 0
-; RV64-NEXT:    mv a2, s8
-; RV64-NEXT:    li a3, 0
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    mv s2, a0
-; RV64-NEXT:    mv s7, a1
-; RV64-NEXT:    mv a0, s5
-; RV64-NEXT:    li a1, 0
-; RV64-NEXT:    mv a2, s8
-; RV64-NEXT:    li a3, 0
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    add s7, a0, s7
-; RV64-NEXT:    sltu a0, s7, a0
-; RV64-NEXT:    add s9, a1, a0
-; RV64-NEXT:    mv a0, s6
-; RV64-NEXT:    li a1, 0
-; RV64-NEXT:    mv a2, s0
-; RV64-NEXT:    li a3, 0
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    add s10, a0, s7
-; RV64-NEXT:    sltu a0, s10, a0
-; RV64-NEXT:    add a0, a1, a0
-; RV64-NEXT:    add s11, s9, a0
-; RV64-NEXT:    mv a0, s5
-; RV64-NEXT:    li a1, 0
-; RV64-NEXT:    mv a2, s0
-; RV64-NEXT:    li a3, 0
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    mv s1, a0
-; RV64-NEXT:    mv s3, s8
-; RV64-NEXT:    mv s8, a1
-; RV64-NEXT:    add s7, a0, s11
-; RV64-NEXT:    mv a0, s0
-; RV64-NEXT:    mv a1, s0
-; RV64-NEXT:    mv a2, s6
-; RV64-NEXT:    mv a3, s5
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    mv s5, a0
-; RV64-NEXT:    mv s6, a1
-; RV64-NEXT:    mv a0, s3
-; RV64-NEXT:    mv a1, s0
-; RV64-NEXT:    ld a2, 0(sp) # 8-byte Folded Reload
-; RV64-NEXT:    mv a3, s4
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    add a2, s5, a0
-; RV64-NEXT:    sltu a3, s7, s1
-; RV64-NEXT:    sltu a4, s11, s9
-; RV64-NEXT:    add a1, s6, a1
-; RV64-NEXT:    add a0, s7, a2
-; RV64-NEXT:    add a4, s8, a4
-; RV64-NEXT:    sltu a2, a2, s5
-; RV64-NEXT:    sltu a5, a0, s7
-; RV64-NEXT:    add a3, a4, a3
-; RV64-NEXT:    add a1, a1, a2
-; RV64-NEXT:    add a1, a3, a1
-; RV64-NEXT:    add a2, a1, a5
-; RV64-NEXT:    j .LBB2_9
-; RV64-NEXT:  .LBB2_6:
-; RV64-NEXT:    sltiu a2, a2, -200
-; RV64-NEXT:    or a2, a3, a2
-; RV64-NEXT:    beqz a2, .LBB2_4
-; RV64-NEXT:  .LBB2_7: # %fp-to-i-if-then5
-; RV64-NEXT:    srai s0, s0, 31
-; RV64-NEXT:    not s2, s0
-; RV64-NEXT:    xori a2, s0, 127
-; RV64-NEXT:    mv s10, s2
-; RV64-NEXT:    mv a0, s2
-; RV64-NEXT:    j .LBB2_10
-; RV64-NEXT:  .LBB2_8: # %fp-to-i-if-else
-; RV64-NEXT:    sd a1, 112(sp)
-; RV64-NEXT:    sd zero, 120(sp)
-; RV64-NEXT:    sd zero, 128(sp)
-; RV64-NEXT:    sd zero, 136(sp)
-; RV64-NEXT:    sd zero, 80(sp)
-; RV64-NEXT:    sd zero, 88(sp)
-; RV64-NEXT:    sd zero, 96(sp)
-; RV64-NEXT:    sd zero, 104(sp)
-; RV64-NEXT:    addi a0, a0, -150
-; RV64-NEXT:    addi a1, sp, 112
-; RV64-NEXT:    srli a2, a0, 3
-; RV64-NEXT:    andi a3, a0, 63
-; RV64-NEXT:    andi a2, a2, 24
-; RV64-NEXT:    xori a3, a3, 63
-; RV64-NEXT:    sub a1, a1, a2
-; RV64-NEXT:    ld a4, 0(a1)
-; RV64-NEXT:    ld a2, 8(a1)
-; RV64-NEXT:    ld a5, 16(a1)
-; RV64-NEXT:    ld a1, 24(a1)
-; RV64-NEXT:    srli a6, a4, 1
-; RV64-NEXT:    srli a7, a2, 1
-; RV64-NEXT:    srli t0, a5, 1
-; RV64-NEXT:    srl a6, a6, a3
-; RV64-NEXT:    srl a7, a7, a3
-; RV64-NEXT:    srl a3, t0, a3
-; RV64-NEXT:    sll a2, a2, a0
-; RV64-NEXT:    sll a5, a5, a0
-; RV64-NEXT:    sll a1, a1, a0
-; RV64-NEXT:    or s3, a2, a6
-; RV64-NEXT:    or a2, a5, a7
-; RV64-NEXT:    or a3, a1, a3
-; RV64-NEXT:    sll s4, a4, a0
-; RV64-NEXT:    mv a0, s8
-; RV64-NEXT:    mv a1, s0
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    mv s2, a0
-; RV64-NEXT:    mv s5, a1
-; RV64-NEXT:    mv a0, s0
-; RV64-NEXT:    mv a1, s0
-; RV64-NEXT:    mv a2, s4
-; RV64-NEXT:    mv a3, s3
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    add a1, a1, s5
-; RV64-NEXT:    add s1, a0, s2
-; RV64-NEXT:    sltu a0, s1, a0
-; RV64-NEXT:    add s7, a1, a0
-; RV64-NEXT:    mv a0, s3
-; RV64-NEXT:    li a1, 0
-; RV64-NEXT:    mv a2, s8
-; RV64-NEXT:    li a3, 0
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    mv s5, a0
-; RV64-NEXT:    mv s6, a1
-; RV64-NEXT:    mv a0, s4
-; RV64-NEXT:    li a1, 0
-; RV64-NEXT:    mv a2, s8
-; RV64-NEXT:    li a3, 0
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    mv s2, a0
-; RV64-NEXT:    add s10, s5, a1
-; RV64-NEXT:    sltu a0, s10, s5
-; RV64-NEXT:    add s6, s6, a0
-; RV64-NEXT:    mv a0, s4
-; RV64-NEXT:    li a1, 0
-; RV64-NEXT:    mv a2, s0
-; RV64-NEXT:    li a3, 0
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    add s10, a0, s10
-; RV64-NEXT:    sltu a0, s10, a0
-; RV64-NEXT:    add a0, a1, a0
-; RV64-NEXT:    add s4, s6, a0
-; RV64-NEXT:    sltu s5, s4, s6
-; RV64-NEXT:    mv a0, s3
-; RV64-NEXT:    li a1, 0
-; RV64-NEXT:    mv a2, s0
-; RV64-NEXT:    li a3, 0
-; RV64-NEXT:    call __multi3
-; RV64-NEXT:    add a1, a1, s5
-; RV64-NEXT:    add s4, a0, s4
-; RV64-NEXT:    sltu a2, s4, a0
-; RV64-NEXT:    add a0, s4, s1
-; RV64-NEXT:    add a1, a1, a2
-; RV64-NEXT:    add a1, a1, s7
-; RV64-NEXT:    sltu a2, a0, s4
-; RV64-NEXT:    add a2, a1, a2
-; RV64-NEXT:  .LBB2_9: # %fp-to-i-cleanup
-; RV64-NEXT:    ld a1, 8(sp) # 8-byte Folded Reload
-; RV64-NEXT:  .LBB2_10: # %fp-to-i-cleanup
-; RV64-NEXT:    sd s2, 0(a1)
-; RV64-NEXT:    sd s10, 8(a1)
-; RV64-NEXT:    sd a0, 16(a1)
-; RV64-NEXT:    sb a2, 24(a1)
-; RV64-NEXT:    ld ra, 248(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s0, 240(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s1, 232(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s2, 224(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s3, 216(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s4, 208(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s5, 200(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s6, 192(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s7, 184(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s8, 176(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s9, 168(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s10, 160(sp) # 8-byte Folded Reload
-; RV64-NEXT:    ld s11, 152(sp) # 8-byte Folded Reload
-; RV64-NEXT:    addi sp, sp, 256
-; RV64-NEXT:    ret
-;
-; RV32-LABEL: test_float_to_bitint_200:
-; RV32:       # %bb.0: # %fp-to-i-entry
-; RV32-NEXT:    addi sp, sp, -336
-; RV32-NEXT:    sw ra, 332(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s0, 328(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s1, 324(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s2, 320(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s3, 316(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s4, 312(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s5, 308(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s6, 304(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s7, 300(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s8, 296(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s9, 292(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s10, 288(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s11, 284(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw a2, 0(a0)
-; RV32-NEXT:    slli a0, a2, 1
-; RV32-NEXT:    srli a0, a0, 24
-; RV32-NEXT:    li a3, 127
-; RV32-NEXT:    bgeu a0, a3, .LBB2_2
-; RV32-NEXT:  # %bb.1:
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    li a2, 0
-; RV32-NEXT:    li a4, 0
-; RV32-NEXT:    li s3, 0
-; RV32-NEXT:    li s8, 0
-; RV32-NEXT:    li s5, 0
-; RV32-NEXT:    li a0, 0
-; RV32-NEXT:    j .LBB2_31
-; RV32-NEXT:  .LBB2_2: # %fp-to-i-if-end
-; RV32-NEXT:    addi a3, a0, -327
-; RV32-NEXT:    sltu a4, a3, a0
-; RV32-NEXT:    sltiu a3, a3, -200
-; RV32-NEXT:    addi a5, a4, -1
-; RV32-NEXT:    or a3, a4, a3
-; RV32-NEXT:    xori a3, a3, 1
-; RV32-NEXT:    and a3, a5, a3
-; RV32-NEXT:    bnez a3, .LBB2_4
-; RV32-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32-NEXT:    srli a2, a2, 31
-; RV32-NEXT:    addi a3, a2, -1
-; RV32-NEXT:    addi a0, a2, -129
-; RV32-NEXT:    zext.b a0, a0
-; RV32-NEXT:    mv a2, a3
-; RV32-NEXT:    mv a4, a3
-; RV32-NEXT:    mv s3, a3
-; RV32-NEXT:    mv s8, a3
-; RV32-NEXT:    mv s5, a3
-; RV32-NEXT:    j .LBB2_31
-; RV32-NEXT:  .LBB2_4: # %fp-to-i-if-end9
-; RV32-NEXT:    sw a1, 136(sp) # 4-byte Folded Spill
-; RV32-NEXT:    srai s0, a2, 31
-; RV32-NEXT:    slli a2, a2, 9
-; RV32-NEXT:    lui a1, 2048
-; RV32-NEXT:    li a3, 149
-; RV32-NEXT:    zext.b a4, s0
-; RV32-NEXT:    sw a4, 132(sp) # 4-byte Folded Spill
-; RV32-NEXT:    srli a2, a2, 9
-; RV32-NEXT:    or a1, a2, a1
-; RV32-NEXT:    ori s11, s0, 1
-; RV32-NEXT:    bltu a3, a0, .LBB2_18
-; RV32-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32-NEXT:    sw zero, 200(sp)
-; RV32-NEXT:    sw zero, 204(sp)
-; RV32-NEXT:    sw zero, 208(sp)
-; RV32-NEXT:    sw zero, 212(sp)
-; RV32-NEXT:    sw zero, 184(sp)
-; RV32-NEXT:    sw zero, 188(sp)
-; RV32-NEXT:    sw zero, 192(sp)
-; RV32-NEXT:    sw zero, 196(sp)
-; RV32-NEXT:    sw zero, 168(sp)
-; RV32-NEXT:    sw zero, 172(sp)
-; RV32-NEXT:    sw zero, 176(sp)
-; RV32-NEXT:    sw zero, 180(sp)
-; RV32-NEXT:    sw a1, 152(sp)
-; RV32-NEXT:    sw zero, 156(sp)
-; RV32-NEXT:    sw zero, 160(sp)
-; RV32-NEXT:    sw zero, 164(sp)
-; RV32-NEXT:    li a1, 150
-; RV32-NEXT:    addi a2, sp, 152
-; RV32-NEXT:    sub t0, a1, a0
-; RV32-NEXT:    srli a0, t0, 3
-; RV32-NEXT:    andi a1, t0, 31
-; RV32-NEXT:    andi a0, a0, 28
-; RV32-NEXT:    xori t1, a1, 31
-; RV32-NEXT:    add a0, a2, a0
-; RV32-NEXT:    lw a1, 16(a0)
-; RV32-NEXT:    lw a2, 20(a0)
-; RV32-NEXT:    lw a6, 24(a0)
-; RV32-NEXT:    lw a3, 28(a0)
-; RV32-NEXT:    sw a3, 88(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw a3, 0(a0)
-; RV32-NEXT:    lw a4, 4(a0)
-; RV32-NEXT:    lw a5, 8(a0)
-; RV32-NEXT:    lw a0, 12(a0)
-; RV32-NEXT:    srl a7, a2, t0
-; RV32-NEXT:    sw a7, 120(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a6, 84(sp) # 4-byte Folded Spill
-; RV32-NEXT:    slli a6, a6, 1
-; RV32-NEXT:    srl a7, a1, t0
-; RV32-NEXT:    sw a7, 116(sp) # 4-byte Folded Spill
-; RV32-NEXT:    slli a2, a2, 1
-; RV32-NEXT:    srl a7, a0, t0
-; RV32-NEXT:    slli a1, a1, 1
-; RV32-NEXT:    sll a1, a1, t1
-; RV32-NEXT:    or s3, a7, a1
-; RV32-NEXT:    srl a1, a5, t0
-; RV32-NEXT:    slli a0, a0, 1
-; RV32-NEXT:    sll a0, a0, t1
-; RV32-NEXT:    or s4, a1, a0
-; RV32-NEXT:    srl a0, a4, t0
-; RV32-NEXT:    slli a5, a5, 1
-; RV32-NEXT:    sw t0, 96(sp) # 4-byte Folded Spill
-; RV32-NEXT:    srl a1, a3, t0
-; RV32-NEXT:    slli a4, a4, 1
-; RV32-NEXT:    sll s8, a6, t1
-; RV32-NEXT:    sll s9, a2, t1
-; RV32-NEXT:    sll a2, a5, t1
-; RV32-NEXT:    sw t1, 92(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sll a3, a4, t1
-; RV32-NEXT:    or s5, a0, a2
-; RV32-NEXT:    or s6, a1, a3
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s11
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a0, 128(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv s1, a1
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s11
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s1, a0, s1
-; RV32-NEXT:    sltu a0, s1, a0
-; RV32-NEXT:    add s2, a1, a0
-; RV32-NEXT:    sw s6, 140(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s1, a0, s1
-; RV32-NEXT:    sw s1, 124(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sltu a0, s1, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s1, s2, a0
-; RV32-NEXT:    sw s5, 148(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s7, a0, s1
-; RV32-NEXT:    sltu a2, s1, s2
-; RV32-NEXT:    sltu a0, s7, a0
-; RV32-NEXT:    add a1, a1, a2
-; RV32-NEXT:    add s10, a1, a0
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s11
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    sw s3, 144(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s11
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s1, a1
-; RV32-NEXT:    add s6, a0, s6
-; RV32-NEXT:    sw s4, 112(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a2, a0, s6
-; RV32-NEXT:    add s7, s5, s7
-; RV32-NEXT:    add s10, a2, s10
-; RV32-NEXT:    sltu s5, s7, s5
-; RV32-NEXT:    add s10, s10, s5
-; RV32-NEXT:    beq s10, a2, .LBB2_7
-; RV32-NEXT:  # %bb.6: # %fp-to-i-if-then12
-; RV32-NEXT:    sltu s5, s10, a2
-; RV32-NEXT:  .LBB2_7: # %fp-to-i-if-then12
-; RV32-NEXT:    lw a3, 120(sp) # 4-byte Folded Reload
-; RV32-NEXT:    or a3, a3, s8
-; RV32-NEXT:    sw a3, 108(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw a3, 116(sp) # 4-byte Folded Reload
-; RV32-NEXT:    or a3, a3, s9
-; RV32-NEXT:    sw a3, 104(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sltu a3, s6, s2
-; RV32-NEXT:    sltu a0, a2, a0
-; RV32-NEXT:    add a3, s1, a3
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    sw a3, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s1, a3, a0
-; RV32-NEXT:    lw a0, 144(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a1, 76(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s1, 80(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 72(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add a0, a0, s1
-; RV32-NEXT:    sw a0, 68(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s4, a0, s5
-; RV32-NEXT:    lw s1, 140(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a0, s1
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s8, a0
-; RV32-NEXT:    mv s9, a1
-; RV32-NEXT:    lw a0, 148(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s6, a0
-; RV32-NEXT:    mv s5, a1
-; RV32-NEXT:    add s11, a0, s9
-; RV32-NEXT:    mv a0, s1
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a2, a0, s11
-; RV32-NEXT:    add s7, s8, s7
-; RV32-NEXT:    sw s7, 120(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sltu s1, s7, s8
-; RV32-NEXT:    add s3, a2, s1
-; RV32-NEXT:    add s3, s3, s10
-; RV32-NEXT:    beq s3, a2, .LBB2_9
-; RV32-NEXT:  # %bb.8: # %fp-to-i-if-then12
-; RV32-NEXT:    sltu s1, s3, a2
-; RV32-NEXT:  .LBB2_9: # %fp-to-i-if-then12
-; RV32-NEXT:    sw s3, 116(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sltu a3, s11, s6
-; RV32-NEXT:    sltu a0, a2, a0
-; RV32-NEXT:    add s10, s5, a3
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s6, s10, a0
-; RV32-NEXT:    lw a0, 148(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s8, a0
-; RV32-NEXT:    sw a1, 52(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s5, a0, s6
-; RV32-NEXT:    add s9, s5, s1
-; RV32-NEXT:    add s2, s4, s9
-; RV32-NEXT:    lw s11, 112(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a0, s11
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a0, 60(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a1, 40(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s7, a0, s2
-; RV32-NEXT:    ori a0, s0, 1
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw s3, 104(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a2, s3
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s1, a0
-; RV32-NEXT:    sw a1, 64(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw a2, 140(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a0, 36(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a1, 56(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s1, a0, s1
-; RV32-NEXT:    sltu a6, s2, s4
-; RV32-NEXT:    lw a2, 68(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a0, s4, a2
-; RV32-NEXT:    lw a1, 72(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a1, a2, a1
-; RV32-NEXT:    lw a2, 100(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a3, 80(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a2, a3, a2
-; RV32-NEXT:    sltu a3, s9, s5
-; RV32-NEXT:    sltu a4, s5, s8
-; RV32-NEXT:    sltu a5, s6, s10
-; RV32-NEXT:    add s8, s7, s1
-; RV32-NEXT:    mv s5, s1
-; RV32-NEXT:    lw a7, 76(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add a2, a7, a2
-; RV32-NEXT:    lw a7, 52(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add a5, a7, a5
-; RV32-NEXT:    sltu s9, s8, s7
-; RV32-NEXT:    add a1, a2, a1
-; RV32-NEXT:    add a4, a5, a4
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add a3, a4, a3
-; RV32-NEXT:    sw a0, 52(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add a3, a0, a3
-; RV32-NEXT:    sw a6, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s4, a3, a6
-; RV32-NEXT:    lw a0, 144(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a1, 48(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 44(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw s10, 40(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s10, a0, s10
-; RV32-NEXT:    mv a0, s11
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a1, 20(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s10, 32(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s10, a0, s10
-; RV32-NEXT:    lw a0, 60(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu s11, s7, a0
-; RV32-NEXT:    add s1, s10, s11
-; RV32-NEXT:    add s1, s1, s4
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s3
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a1, 80(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 72(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw s2, 64(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s2, a0, s2
-; RV32-NEXT:    ori a0, s0, 1
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw a2, 108(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a1, 64(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s2, 68(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 60(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s2, a0, s2
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw a2, 140(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a1, 40(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw s6, 56(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s6, a0, s6
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw a2, 148(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s7, a0
-; RV32-NEXT:    sw s6, 24(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s6, a0, s6
-; RV32-NEXT:    sw s2, 56(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s2, s6, s2
-; RV32-NEXT:    lw a0, 36(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a0, s5, a0
-; RV32-NEXT:    sw a0, 76(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s2, s2, a0
-; RV32-NEXT:    add s5, s2, s9
-; RV32-NEXT:    add s5, s1, s5
-; RV32-NEXT:    sw a1, 36(sp) # 4-byte Folded Spill
-; RV32-NEXT:    beq s5, s1, .LBB2_11
-; RV32-NEXT:  # %bb.10: # %fp-to-i-if-then12
-; RV32-NEXT:    sltu s9, s5, s1
-; RV32-NEXT:  .LBB2_11: # %fp-to-i-if-then12
-; RV32-NEXT:    lw a4, 88(sp) # 4-byte Folded Reload
-; RV32-NEXT:    slli a1, a4, 1
-; RV32-NEXT:    lw a2, 96(sp) # 4-byte Folded Reload
-; RV32-NEXT:    beq s1, s10, .LBB2_13
-; RV32-NEXT:  # %bb.12: # %fp-to-i-if-then12
-; RV32-NEXT:    sltu s11, s1, s10
-; RV32-NEXT:  .LBB2_13: # %fp-to-i-if-then12
-; RV32-NEXT:    lw a0, 84(sp) # 4-byte Folded Reload
-; RV32-NEXT:    srl a0, a0, a2
-; RV32-NEXT:    lw a3, 92(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sll a1, a1, a3
-; RV32-NEXT:    lw s3, 116(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a3, 52(sp) # 4-byte Folded Reload
-; RV32-NEXT:    beq s4, a3, .LBB2_15
-; RV32-NEXT:  # %bb.14: # %fp-to-i-if-then12
-; RV32-NEXT:    sltu a3, s4, a3
-; RV32-NEXT:    sw a3, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:  .LBB2_15: # %fp-to-i-if-then12
-; RV32-NEXT:    sw s9, 92(sp) # 4-byte Folded Spill
-; RV32-NEXT:    or a0, a0, a1
-; RV32-NEXT:    sw a0, 84(sp) # 4-byte Folded Spill
-; RV32-NEXT:    srl a0, a4, a2
-; RV32-NEXT:    sw a0, 96(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw a0, 44(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a1, 32(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a0, a1, a0
-; RV32-NEXT:    lw a1, 16(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a1, s10, a1
-; RV32-NEXT:    lw s1, 48(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s1, s1, a0
-; RV32-NEXT:    lw s4, 20(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s4, s4, a1
-; RV32-NEXT:    lw a0, 144(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a0, a0, s1
-; RV32-NEXT:    add a0, a0, s4
-; RV32-NEXT:    lw a1, 100(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add a0, a0, a1
-; RV32-NEXT:    add s11, a0, s11
-; RV32-NEXT:    lw s10, 76(sp) # 4-byte Folded Reload
-; RV32-NEXT:    beq s2, s6, .LBB2_17
-; RV32-NEXT:  # %bb.16: # %fp-to-i-if-then12
-; RV32-NEXT:    sltu s10, s2, s6
-; RV32-NEXT:  .LBB2_17: # %fp-to-i-if-then12
-; RV32-NEXT:    lw a0, 140(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s9, 148(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a1, s9
-; RV32-NEXT:    lw a2, 132(sp) # 4-byte Folded Reload
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s1, a0
-; RV32-NEXT:    lw a0, 112(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a1, 144(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    mv a3, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s1, a0, s1
-; RV32-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a1, 24(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a0, a1, a0
-; RV32-NEXT:    sltu a1, s6, s7
-; RV32-NEXT:    lw s2, 40(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s2, s2, a0
-; RV32-NEXT:    lw s4, 36(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s4, s4, a1
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s9
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a0, a0, s2
-; RV32-NEXT:    lw a1, 72(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a2, 68(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a1, a2, a1
-; RV32-NEXT:    lw a2, 60(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a3, 56(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a2, a3, a2
-; RV32-NEXT:    add a0, a0, s4
-; RV32-NEXT:    lw s2, 80(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s2, s2, a1
-; RV32-NEXT:    add s4, a0, s1
-; RV32-NEXT:    lw s1, 64(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s1, s1, a2
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw s6, 108(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a2, s6
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a0, a0, s2
-; RV32-NEXT:    add s2, a0, s1
-; RV32-NEXT:    lw a0, 104(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a1, s6
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    mv a3, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s1, a0
-; RV32-NEXT:    lw a0, 84(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a1, 96(sp) # 4-byte Folded Reload
-; RV32-NEXT:    ori a2, s0, 1
-; RV32-NEXT:    mv a3, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a0, a0, s1
-; RV32-NEXT:    add a0, s2, a0
-; RV32-NEXT:    add a0, s4, a0
-; RV32-NEXT:    add a0, a0, s10
-; RV32-NEXT:    add a0, s11, a0
-; RV32-NEXT:    lw a1, 92(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add a0, a0, a1
-; RV32-NEXT:    zext.b a0, a0
-; RV32-NEXT:    lw a1, 136(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a3, 128(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a2, 124(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a4, 120(sp) # 4-byte Folded Reload
-; RV32-NEXT:    j .LBB2_31
-; RV32-NEXT:  .LBB2_18: # %fp-to-i-if-else
-; RV32-NEXT:    sw zero, 264(sp)
-; RV32-NEXT:    sw zero, 268(sp)
-; RV32-NEXT:    sw zero, 272(sp)
-; RV32-NEXT:    sw zero, 276(sp)
-; RV32-NEXT:    sw a1, 248(sp)
-; RV32-NEXT:    sw zero, 252(sp)
-; RV32-NEXT:    sw zero, 256(sp)
-; RV32-NEXT:    sw zero, 260(sp)
-; RV32-NEXT:    sw zero, 232(sp)
-; RV32-NEXT:    sw zero, 236(sp)
-; RV32-NEXT:    sw zero, 240(sp)
-; RV32-NEXT:    sw zero, 244(sp)
-; RV32-NEXT:    sw zero, 216(sp)
-; RV32-NEXT:    sw zero, 220(sp)
-; RV32-NEXT:    sw zero, 224(sp)
-; RV32-NEXT:    sw zero, 228(sp)
-; RV32-NEXT:    addi a7, a0, -150
-; RV32-NEXT:    addi a0, sp, 248
-; RV32-NEXT:    srli a1, a7, 3
-; RV32-NEXT:    andi a2, a7, 31
-; RV32-NEXT:    andi a1, a1, 28
-; RV32-NEXT:    xori t0, a2, 31
-; RV32-NEXT:    sub a0, a0, a1
-; RV32-NEXT:    lw a1, 16(a0)
-; RV32-NEXT:    lw a5, 20(a0)
-; RV32-NEXT:    lw a2, 24(a0)
-; RV32-NEXT:    sw a2, 76(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw a2, 28(a0)
-; RV32-NEXT:    sw a2, 80(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw a2, 0(a0)
-; RV32-NEXT:    lw a3, 4(a0)
-; RV32-NEXT:    lw a4, 8(a0)
-; RV32-NEXT:    lw a0, 12(a0)
-; RV32-NEXT:    sw a5, 72(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sll a5, a5, a7
-; RV32-NEXT:    sw a5, 140(sp) # 4-byte Folded Spill
-; RV32-NEXT:    srli a5, a1, 1
-; RV32-NEXT:    sll a1, a1, a7
-; RV32-NEXT:    sw a1, 120(sp) # 4-byte Folded Spill
-; RV32-NEXT:    srli a1, a0, 1
-; RV32-NEXT:    sll a0, a0, a7
-; RV32-NEXT:    srli a6, a4, 1
-; RV32-NEXT:    sll a4, a4, a7
-; RV32-NEXT:    srl a6, a6, t0
-; RV32-NEXT:    or s3, a0, a6
-; RV32-NEXT:    srli a0, a3, 1
-; RV32-NEXT:    sll a3, a3, a7
-; RV32-NEXT:    srl a0, a0, t0
-; RV32-NEXT:    or s4, a4, a0
-; RV32-NEXT:    srli a0, a2, 1
-; RV32-NEXT:    srl s8, a5, t0
-; RV32-NEXT:    srl s9, a1, t0
-; RV32-NEXT:    sw t0, 84(sp) # 4-byte Folded Spill
-; RV32-NEXT:    srl a0, a0, t0
-; RV32-NEXT:    or s6, a3, a0
-; RV32-NEXT:    sw a7, 88(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sll s7, a2, a7
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s11
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s1, a0
-; RV32-NEXT:    mv s2, a1
-; RV32-NEXT:    mv a0, s7
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s11
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a0, 128(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s5, s1, a1
-; RV32-NEXT:    sltu a0, s5, s1
-; RV32-NEXT:    add s2, s2, a0
-; RV32-NEXT:    sw s7, 144(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv a0, s7
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s5, a0, s5
-; RV32-NEXT:    sw s5, 124(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sltu a0, s5, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s1, s2, a0
-; RV32-NEXT:    sltu s2, s1, s2
-; RV32-NEXT:    sw s6, 148(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a1, a1, s2
-; RV32-NEXT:    add s10, a0, s1
-; RV32-NEXT:    sltu a0, s10, a0
-; RV32-NEXT:    add s6, a1, a0
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s11
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s7, a1
-; RV32-NEXT:    sw s3, 112(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s11
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s1, a1
-; RV32-NEXT:    add s7, a0, s7
-; RV32-NEXT:    sw s4, 108(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a2, a0, s7
-; RV32-NEXT:    add s10, s5, s10
-; RV32-NEXT:    add s6, a2, s6
-; RV32-NEXT:    sltu s5, s10, s5
-; RV32-NEXT:    add s11, s6, s5
-; RV32-NEXT:    beq s11, a2, .LBB2_20
-; RV32-NEXT:  # %bb.19: # %fp-to-i-if-else
-; RV32-NEXT:    sltu s5, s11, a2
-; RV32-NEXT:  .LBB2_20: # %fp-to-i-if-else
-; RV32-NEXT:    lw a3, 140(sp) # 4-byte Folded Reload
-; RV32-NEXT:    or a3, a3, s8
-; RV32-NEXT:    sw a3, 104(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw a3, 120(sp) # 4-byte Folded Reload
-; RV32-NEXT:    or a3, a3, s9
-; RV32-NEXT:    sw a3, 140(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sltu a3, s7, s2
-; RV32-NEXT:    sltu a0, a2, a0
-; RV32-NEXT:    add a3, s1, a3
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    sw a3, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s1, a3, a0
-; RV32-NEXT:    lw a0, 112(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a1, 96(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s1, 92(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 64(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s1, a0, s1
-; RV32-NEXT:    sw s1, 68(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s2, s1, s5
-; RV32-NEXT:    lw a0, 148(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s7, a0
-; RV32-NEXT:    mv s5, a1
-; RV32-NEXT:    lw s1, 144(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a0, s1
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s8, a0
-; RV32-NEXT:    add s4, s7, a1
-; RV32-NEXT:    mv a0, s1
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a2, a0, s4
-; RV32-NEXT:    add s10, s8, s10
-; RV32-NEXT:    sw s10, 120(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sltu s1, s10, s8
-; RV32-NEXT:    add s3, a2, s1
-; RV32-NEXT:    add s3, s3, s11
-; RV32-NEXT:    beq s3, a2, .LBB2_22
-; RV32-NEXT:  # %bb.21: # %fp-to-i-if-else
-; RV32-NEXT:    sltu s1, s3, a2
-; RV32-NEXT:  .LBB2_22: # %fp-to-i-if-else
-; RV32-NEXT:    sw s3, 116(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sltu a3, s4, s7
-; RV32-NEXT:    sltu a0, a2, a0
-; RV32-NEXT:    add s5, s5, a3
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s9, s5, a0
-; RV32-NEXT:    lw a0, 148(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s10, a0
-; RV32-NEXT:    sw a1, 56(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s8, a0, s9
-; RV32-NEXT:    add s3, s8, s1
-; RV32-NEXT:    add s1, s2, s3
-; RV32-NEXT:    lw s6, 108(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s11, a0
-; RV32-NEXT:    sw a1, 60(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s4, a0, s1
-; RV32-NEXT:    ori a0, s0, 1
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw a2, 140(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s7, a0
-; RV32-NEXT:    sw a1, 24(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw a2, 144(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a0, 28(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a1, 52(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s7, a0, s7
-; RV32-NEXT:    sltu a6, s1, s2
-; RV32-NEXT:    lw a3, 68(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a0, 64(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a0, a3, a0
-; RV32-NEXT:    lw a1, 100(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a2, 92(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a1, a2, a1
-; RV32-NEXT:    sltu a2, s2, a3
-; RV32-NEXT:    sltu a3, s3, s8
-; RV32-NEXT:    sltu a4, s9, s5
-; RV32-NEXT:    sltu a5, s8, s10
-; RV32-NEXT:    add s8, s4, s7
-; RV32-NEXT:    mv s2, s7
-; RV32-NEXT:    lw a7, 96(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add a1, a7, a1
-; RV32-NEXT:    lw a7, 56(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add a4, a7, a4
-; RV32-NEXT:    sltu s5, s8, s4
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add a4, a4, a5
-; RV32-NEXT:    add s10, a0, a2
-; RV32-NEXT:    add a3, a4, a3
-; RV32-NEXT:    add a3, s10, a3
-; RV32-NEXT:    sw a6, 96(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s3, a3, a6
-; RV32-NEXT:    lw s9, 112(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a0, s9
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a1, 48(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 40(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw s1, 60(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s1, a0, s1
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a1, 20(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s1, 32(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 16(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s6, a0, s1
-; RV32-NEXT:    sltu s7, s4, s11
-; RV32-NEXT:    add s11, s6, s7
-; RV32-NEXT:    add s11, s11, s3
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw a2, 148(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s1, a0
-; RV32-NEXT:    sw a1, 68(sp) # 4-byte Folded Spill
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw a2, 144(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a1, 60(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 56(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw a1, 52(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add a0, a0, a1
-; RV32-NEXT:    sw s1, 64(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 52(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s1, s1, a0
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw a2, 140(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw a1, 44(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 36(sp) # 4-byte Folded Spill
-; RV32-NEXT:    lw s4, 24(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s4, a0, s4
-; RV32-NEXT:    ori a0, s0, 1
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw a2, 104(sp) # 4-byte Folded Reload
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    sw s4, 24(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw a0, 12(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add a0, a0, s4
-; RV32-NEXT:    sw a0, 8(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s4, s1, a0
-; RV32-NEXT:    lw a0, 28(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a0, s2, a0
-; RV32-NEXT:    sw a0, 92(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s4, s4, a0
-; RV32-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:    add s5, s4, s5
-; RV32-NEXT:    add s5, s11, s5
-; RV32-NEXT:    sw a1, 28(sp) # 4-byte Folded Spill
-; RV32-NEXT:    beq s5, s11, .LBB2_24
-; RV32-NEXT:  # %bb.23: # %fp-to-i-if-else
-; RV32-NEXT:    sltu a0, s5, s11
-; RV32-NEXT:    sw a0, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:  .LBB2_24: # %fp-to-i-if-else
-; RV32-NEXT:    lw a2, 72(sp) # 4-byte Folded Reload
-; RV32-NEXT:    srli a2, a2, 1
-; RV32-NEXT:    lw a0, 76(sp) # 4-byte Folded Reload
-; RV32-NEXT:    srli a1, a0, 1
-; RV32-NEXT:    beq s11, s6, .LBB2_26
-; RV32-NEXT:  # %bb.25: # %fp-to-i-if-else
-; RV32-NEXT:    sltu s7, s11, s6
-; RV32-NEXT:  .LBB2_26: # %fp-to-i-if-else
-; RV32-NEXT:    lw a3, 88(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sll a0, a0, a3
-; RV32-NEXT:    lw a4, 84(sp) # 4-byte Folded Reload
-; RV32-NEXT:    srl a2, a2, a4
-; RV32-NEXT:    lw a5, 80(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sll a3, a5, a3
-; RV32-NEXT:    srl a1, a1, a4
-; RV32-NEXT:    beq s3, s10, .LBB2_28
-; RV32-NEXT:  # %bb.27: # %fp-to-i-if-else
-; RV32-NEXT:    sltu a4, s3, s10
-; RV32-NEXT:    sw a4, 96(sp) # 4-byte Folded Spill
-; RV32-NEXT:  .LBB2_28: # %fp-to-i-if-else
-; RV32-NEXT:    or s11, a0, a2
-; RV32-NEXT:    or s10, a3, a1
-; RV32-NEXT:    lw a0, 40(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a1, 32(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a0, a1, a0
-; RV32-NEXT:    lw a1, 16(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a1, s6, a1
-; RV32-NEXT:    lw s2, 48(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s2, s2, a0
-; RV32-NEXT:    lw s3, 20(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s3, s3, a1
-; RV32-NEXT:    mv a0, s9
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a0, a0, s2
-; RV32-NEXT:    add a0, a0, s3
-; RV32-NEXT:    lw a1, 96(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add a0, a0, a1
-; RV32-NEXT:    add s7, a0, s7
-; RV32-NEXT:    beq s4, s1, .LBB2_30
-; RV32-NEXT:  # %bb.29: # %fp-to-i-if-else
-; RV32-NEXT:    sltu a0, s4, s1
-; RV32-NEXT:    sw a0, 92(sp) # 4-byte Folded Spill
-; RV32-NEXT:  .LBB2_30: # %fp-to-i-if-else
-; RV32-NEXT:    lw a0, 140(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s6, 104(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a1, s6
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    mv a3, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv a0, s11
-; RV32-NEXT:    mv a1, s10
-; RV32-NEXT:    ori a2, s0, 1
-; RV32-NEXT:    mv a3, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s2, a0, s2
-; RV32-NEXT:    lw a0, 36(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a1, 24(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a0, a1, a0
-; RV32-NEXT:    lw a1, 12(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a2, 8(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a1, a2, a1
-; RV32-NEXT:    lw s3, 44(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s3, s3, a0
-; RV32-NEXT:    lw s4, 28(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s4, s4, a1
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s6
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a0, a0, s3
-; RV32-NEXT:    add a0, a0, s4
-; RV32-NEXT:    add s3, a0, s2
-; RV32-NEXT:    lw a0, 108(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a1, s9
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    mv a3, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    lw a0, 144(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s6, 148(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a1, s6
-; RV32-NEXT:    lw a2, 132(sp) # 4-byte Folded Reload
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s2, s2, a0
-; RV32-NEXT:    lw a0, 64(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a0, s1, a0
-; RV32-NEXT:    lw a1, 56(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a2, 52(sp) # 4-byte Folded Reload
-; RV32-NEXT:    sltu a1, a2, a1
-; RV32-NEXT:    lw s1, 68(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s1, s1, a0
-; RV32-NEXT:    lw s4, 60(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add s4, s4, a1
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s6
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a0, a0, s4
-; RV32-NEXT:    add a0, a0, s2
-; RV32-NEXT:    add a0, a0, s1
-; RV32-NEXT:    lw a1, 92(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add a0, a0, a1
-; RV32-NEXT:    add a0, a0, s3
-; RV32-NEXT:    add a0, s7, a0
-; RV32-NEXT:    lw a1, 100(sp) # 4-byte Folded Reload
-; RV32-NEXT:    add a0, a0, a1
-; RV32-NEXT:    zext.b a0, a0
-; RV32-NEXT:    lw a1, 136(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a3, 128(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a2, 124(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw a4, 120(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s3, 116(sp) # 4-byte Folded Reload
-; RV32-NEXT:  .LBB2_31: # %fp-to-i-cleanup
-; RV32-NEXT:    sw a3, 0(a1)
-; RV32-NEXT:    sw a2, 4(a1)
-; RV32-NEXT:    sw a4, 8(a1)
-; RV32-NEXT:    sw s3, 12(a1)
-; RV32-NEXT:    sw s8, 16(a1)
-; RV32-NEXT:    sw s5, 20(a1)
-; RV32-NEXT:    sb a0, 24(a1)
-; RV32-NEXT:    lw ra, 332(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s0, 328(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s1, 324(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s2, 320(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s3, 316(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s4, 312(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s5, 308(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s6, 304(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s7, 300(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s8, 296(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s9, 292(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s10, 288(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s11, 284(sp) # 4-byte Folded Reload
-; RV32-NEXT:    addi sp, sp, 336
-; RV32-NEXT:    ret
-  %1 = load float, ptr %in, align 4
-  %2 = fptosi float %1 to i200
-  store i200 %2, ptr %out, align 8
-  ret void
-}
-
diff --git a/llvm/test/CodeGen/RISCV/fpclamptosat.ll b/llvm/test/CodeGen/RISCV/fpclamptosat.ll
index 5e398191e0083..a724556e553d5 100644
--- a/llvm/test/CodeGen/RISCV/fpclamptosat.ll
+++ b/llvm/test/CodeGen/RISCV/fpclamptosat.ll
@@ -1082,324 +1082,66 @@ entry:
 
 define i64 @stest_f64i64(double %x) {
 ; RV32IF-LABEL: stest_f64i64:
-; RV32IF:       # %bb.0: # %entryfp-to-i-entry
-; RV32IF-NEXT:    addi sp, sp, -128
-; RV32IF-NEXT:    .cfi_def_cfa_offset 128
-; RV32IF-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32IF:       # %bb.0: # %entry
+; RV32IF-NEXT:    addi sp, sp, -32
+; RV32IF-NEXT:    .cfi_def_cfa_offset 32
+; RV32IF-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IF-NEXT:    .cfi_offset ra, -4
-; RV32IF-NEXT:    .cfi_offset s0, -8
-; RV32IF-NEXT:    .cfi_offset s1, -12
-; RV32IF-NEXT:    .cfi_offset s2, -16
-; RV32IF-NEXT:    .cfi_offset s3, -20
-; RV32IF-NEXT:    .cfi_offset s4, -24
-; RV32IF-NEXT:    .cfi_offset s5, -28
-; RV32IF-NEXT:    .cfi_offset s6, -32
-; RV32IF-NEXT:    .cfi_offset s7, -36
-; RV32IF-NEXT:    .cfi_offset s8, -40
-; RV32IF-NEXT:    .cfi_offset s9, -44
-; RV32IF-NEXT:    .cfi_offset s10, -48
-; RV32IF-NEXT:    .cfi_offset s11, -52
-; RV32IF-NEXT:    slli a2, a1, 1
-; RV32IF-NEXT:    srli a2, a2, 21
-; RV32IF-NEXT:    li a3, 1023
-; RV32IF-NEXT:    bgeu a2, a3, .LBB18_2
-; RV32IF-NEXT:  # %bb.1:
-; RV32IF-NEXT:    li s2, 0
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    li a0, 0
-; RV32IF-NEXT:    li a2, 0
-; RV32IF-NEXT:    j .LBB18_7
-; RV32IF-NEXT:  .LBB18_2: # %fp-to-i-if-end
-; RV32IF-NEXT:    addi a3, a2, -1151
-; RV32IF-NEXT:    sltu a4, a3, a2
-; RV32IF-NEXT:    sltiu a3, a3, -128
-; RV32IF-NEXT:    or a4, a4, a3
-; RV32IF-NEXT:    srli a3, a1, 31
-; RV32IF-NEXT:    beqz a4, .LBB18_4
-; RV32IF-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IF-NEXT:    xori a0, a3, 1
-; RV32IF-NEXT:    lui a2, 524288
-; RV32IF-NEXT:    neg s2, a0
-; RV32IF-NEXT:    sub a2, a2, a0
-; RV32IF-NEXT:    mv a1, s2
-; RV32IF-NEXT:    mv a0, s2
-; RV32IF-NEXT:    j .LBB18_7
-; RV32IF-NEXT:  .LBB18_4: # %fp-to-i-if-end9
-; RV32IF-NEXT:    neg s0, a3
-; RV32IF-NEXT:    slli a1, a1, 12
-; RV32IF-NEXT:    lui a3, 256
-; RV32IF-NEXT:    li a4, 1074
-; RV32IF-NEXT:    srli a1, a1, 12
-; RV32IF-NEXT:    or a1, a1, a3
-; RV32IF-NEXT:    ori s8, s0, 1
-; RV32IF-NEXT:    bltu a4, a2, .LBB18_6
-; RV32IF-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IF-NEXT:    sw zero, 24(sp)
-; RV32IF-NEXT:    sw zero, 28(sp)
-; RV32IF-NEXT:    sw zero, 32(sp)
-; RV32IF-NEXT:    sw zero, 36(sp)
-; RV32IF-NEXT:    sw a0, 8(sp)
-; RV32IF-NEXT:    sw a1, 12(sp)
-; RV32IF-NEXT:    sw zero, 16(sp)
-; RV32IF-NEXT:    sw zero, 20(sp)
-; RV32IF-NEXT:    li a0, 1075
-; RV32IF-NEXT:    addi a1, sp, 8
-; RV32IF-NEXT:    sub a0, a0, a2
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a3, 8(a1)
-; RV32IF-NEXT:    lw a4, 12(a1)
-; RV32IF-NEXT:    lw a1, 0(a1)
-; RV32IF-NEXT:    andi a5, a0, 31
-; RV32IF-NEXT:    xori a5, a5, 31
-; RV32IF-NEXT:    slli a6, a4, 1
-; RV32IF-NEXT:    slli a7, a3, 1
-; RV32IF-NEXT:    slli t0, a2, 1
-; RV32IF-NEXT:    sll a6, a6, a5
-; RV32IF-NEXT:    sll a7, a7, a5
-; RV32IF-NEXT:    sll a5, t0, a5
-; RV32IF-NEXT:    srl a3, a3, a0
-; RV32IF-NEXT:    srl a2, a2, a0
-; RV32IF-NEXT:    srl a1, a1, a0
-; RV32IF-NEXT:    or a3, a3, a6
-; RV32IF-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    or s5, a2, a7
-; RV32IF-NEXT:    or s6, a1, a5
-; RV32IF-NEXT:    srl s4, a4, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s7, a1
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s7, a0, s7
-; RV32IF-NEXT:    sltu a0, s7, a0
-; RV32IF-NEXT:    add s9, a1, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s10, a0, s7
-; RV32IF-NEXT:    sltu a0, s10, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s11, s9, a0
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s1, a0
-; RV32IF-NEXT:    mv s3, s8
-; RV32IF-NEXT:    mv s8, a1
-; RV32IF-NEXT:    add s7, a0, s11
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s6
-; RV32IF-NEXT:    mv a3, s5
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    mv a3, s4
-; RV32IF-NEXT:    call __muldi3
 ; RV32IF-NEXT:    mv a2, a1
-; RV32IF-NEXT:    mv a1, s10
-; RV32IF-NEXT:    add a3, s5, a0
-; RV32IF-NEXT:    sltu a4, s7, s1
-; RV32IF-NEXT:    sltu a5, s11, s9
-; RV32IF-NEXT:    add a2, s6, a2
-; RV32IF-NEXT:    add a0, s7, a3
-; RV32IF-NEXT:    add a5, s8, a5
-; RV32IF-NEXT:    sltu a3, a3, s5
-; RV32IF-NEXT:    sltu a6, a0, s7
-; RV32IF-NEXT:    add a4, a5, a4
-; RV32IF-NEXT:    add a2, a2, a3
-; RV32IF-NEXT:    add a2, a4, a2
-; RV32IF-NEXT:    add a2, a2, a6
-; RV32IF-NEXT:    j .LBB18_7
-; RV32IF-NEXT:  .LBB18_6: # %fp-to-i-if-else
-; RV32IF-NEXT:    sw a0, 56(sp)
-; RV32IF-NEXT:    sw a1, 60(sp)
-; RV32IF-NEXT:    sw zero, 64(sp)
-; RV32IF-NEXT:    sw zero, 68(sp)
-; RV32IF-NEXT:    sw zero, 40(sp)
-; RV32IF-NEXT:    sw zero, 44(sp)
-; RV32IF-NEXT:    sw zero, 48(sp)
-; RV32IF-NEXT:    sw zero, 52(sp)
-; RV32IF-NEXT:    addi a0, a2, -1075
-; RV32IF-NEXT:    addi a1, sp, 56
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a3, a0, 31
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    xori a3, a3, 31
-; RV32IF-NEXT:    sub a1, a1, a2
-; RV32IF-NEXT:    lw a4, 0(a1)
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a5, 8(a1)
-; RV32IF-NEXT:    lw a1, 12(a1)
-; RV32IF-NEXT:    srli a6, a4, 1
-; RV32IF-NEXT:    srli a7, a2, 1
-; RV32IF-NEXT:    srli t0, a5, 1
-; RV32IF-NEXT:    srl a6, a6, a3
-; RV32IF-NEXT:    srl a7, a7, a3
-; RV32IF-NEXT:    srl a3, t0, a3
-; RV32IF-NEXT:    sll a2, a2, a0
-; RV32IF-NEXT:    sll a5, a5, a0
-; RV32IF-NEXT:    sll a1, a1, a0
-; RV32IF-NEXT:    or s3, a2, a6
-; RV32IF-NEXT:    or a2, a5, a7
-; RV32IF-NEXT:    or a3, a1, a3
-; RV32IF-NEXT:    sll s4, a4, a0
-; RV32IF-NEXT:    mv a0, s8
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s5, a1
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s4
-; RV32IF-NEXT:    mv a3, s3
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a1, a1, s5
-; RV32IF-NEXT:    add s1, a0, s2
-; RV32IF-NEXT:    sltu a0, s1, a0
-; RV32IF-NEXT:    add s7, a1, a0
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    add s8, s5, a1
-; RV32IF-NEXT:    sltu a0, s8, s5
-; RV32IF-NEXT:    add s6, s6, a0
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s8, a0, s8
-; RV32IF-NEXT:    sltu a0, s8, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s4, s6, a0
-; RV32IF-NEXT:    sltu s5, s4, s6
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv a2, a1
-; RV32IF-NEXT:    mv a1, s8
-; RV32IF-NEXT:    add a2, a2, s5
-; RV32IF-NEXT:    add s4, a0, s4
-; RV32IF-NEXT:    sltu a3, s4, a0
-; RV32IF-NEXT:    add a0, s4, s1
-; RV32IF-NEXT:    add a2, a2, a3
-; RV32IF-NEXT:    add a2, a2, s7
-; RV32IF-NEXT:    sltu a3, a0, s4
-; RV32IF-NEXT:    add a2, a2, a3
-; RV32IF-NEXT:  .LBB18_7: # %fp-to-i-cleanup
-; RV32IF-NEXT:    lui a3, 524288
-; RV32IF-NEXT:    addi a4, a3, -1
-; RV32IF-NEXT:    beq a1, a4, .LBB18_9
-; RV32IF-NEXT:  # %bb.8: # %fp-to-i-cleanup
-; RV32IF-NEXT:    sltu a5, a1, a4
-; RV32IF-NEXT:    or a6, a0, a2
-; RV32IF-NEXT:    bnez a6, .LBB18_10
-; RV32IF-NEXT:    j .LBB18_11
-; RV32IF-NEXT:  .LBB18_9:
-; RV32IF-NEXT:    sltiu a5, s2, -1
-; RV32IF-NEXT:    or a6, a0, a2
-; RV32IF-NEXT:    beqz a6, .LBB18_11
-; RV32IF-NEXT:  .LBB18_10: # %fp-to-i-cleanup
-; RV32IF-NEXT:    srli a5, a2, 31
-; RV32IF-NEXT:  .LBB18_11: # %fp-to-i-cleanup
-; RV32IF-NEXT:    neg a6, a5
-; RV32IF-NEXT:    addi a7, a5, -1
-; RV32IF-NEXT:    bnez a5, .LBB18_13
-; RV32IF-NEXT:  # %bb.12: # %fp-to-i-cleanup
-; RV32IF-NEXT:    mv a1, a4
-; RV32IF-NEXT:  .LBB18_13: # %fp-to-i-cleanup
-; RV32IF-NEXT:    or a4, a7, s2
-; RV32IF-NEXT:    and a2, a6, a2
-; RV32IF-NEXT:    and a5, a6, a0
-; RV32IF-NEXT:    beq a1, a3, .LBB18_15
-; RV32IF-NEXT:  # %bb.14: # %fp-to-i-cleanup
-; RV32IF-NEXT:    sltu a0, a3, a1
-; RV32IF-NEXT:    j .LBB18_16
-; RV32IF-NEXT:  .LBB18_15:
-; RV32IF-NEXT:    snez a0, a4
-; RV32IF-NEXT:  .LBB18_16: # %fp-to-i-cleanup
-; RV32IF-NEXT:    and a5, a5, a2
-; RV32IF-NEXT:    li a3, -1
-; RV32IF-NEXT:    beq a5, a3, .LBB18_18
-; RV32IF-NEXT:  # %bb.17: # %fp-to-i-cleanup
-; RV32IF-NEXT:    srli a2, a2, 31
-; RV32IF-NEXT:    xori a0, a2, 1
-; RV32IF-NEXT:  .LBB18_18: # %fp-to-i-cleanup
-; RV32IF-NEXT:    bnez a0, .LBB18_20
-; RV32IF-NEXT:  # %bb.19: # %fp-to-i-cleanup
+; RV32IF-NEXT:    mv a1, a0
+; RV32IF-NEXT:    addi a0, sp, 8
+; RV32IF-NEXT:    call __fixdfti
+; RV32IF-NEXT:    lw a3, 8(sp)
+; RV32IF-NEXT:    lw a1, 12(sp)
+; RV32IF-NEXT:    lw a2, 16(sp)
+; RV32IF-NEXT:    lw a4, 20(sp)
+; RV32IF-NEXT:    lui a0, 524288
+; RV32IF-NEXT:    addi a5, a0, -1
+; RV32IF-NEXT:    beq a1, a5, .LBB18_2
+; RV32IF-NEXT:  # %bb.1: # %entry
+; RV32IF-NEXT:    sltu a6, a1, a5
+; RV32IF-NEXT:    or a7, a2, a4
+; RV32IF-NEXT:    bnez a7, .LBB18_3
+; RV32IF-NEXT:    j .LBB18_4
+; RV32IF-NEXT:  .LBB18_2:
+; RV32IF-NEXT:    sltiu a6, a3, -1
+; RV32IF-NEXT:    or a7, a2, a4
+; RV32IF-NEXT:    beqz a7, .LBB18_4
+; RV32IF-NEXT:  .LBB18_3: # %entry
+; RV32IF-NEXT:    srli a6, a4, 31
+; RV32IF-NEXT:  .LBB18_4: # %entry
+; RV32IF-NEXT:    neg a7, a6
+; RV32IF-NEXT:    addi t0, a6, -1
+; RV32IF-NEXT:    bnez a6, .LBB18_6
+; RV32IF-NEXT:  # %bb.5: # %entry
+; RV32IF-NEXT:    mv a1, a5
+; RV32IF-NEXT:  .LBB18_6: # %entry
+; RV32IF-NEXT:    or a3, t0, a3
+; RV32IF-NEXT:    and a4, a7, a4
+; RV32IF-NEXT:    and a2, a7, a2
+; RV32IF-NEXT:    beq a1, a0, .LBB18_8
+; RV32IF-NEXT:  # %bb.7: # %entry
+; RV32IF-NEXT:    sltu a0, a0, a1
+; RV32IF-NEXT:    j .LBB18_9
+; RV32IF-NEXT:  .LBB18_8:
+; RV32IF-NEXT:    snez a0, a3
+; RV32IF-NEXT:  .LBB18_9: # %entry
+; RV32IF-NEXT:    and a2, a2, a4
+; RV32IF-NEXT:    li a5, -1
+; RV32IF-NEXT:    beq a2, a5, .LBB18_11
+; RV32IF-NEXT:  # %bb.10: # %entry
+; RV32IF-NEXT:    srli a4, a4, 31
+; RV32IF-NEXT:    xori a0, a4, 1
+; RV32IF-NEXT:  .LBB18_11: # %entry
+; RV32IF-NEXT:    bnez a0, .LBB18_13
+; RV32IF-NEXT:  # %bb.12: # %entry
 ; RV32IF-NEXT:    lui a1, 524288
-; RV32IF-NEXT:  .LBB18_20: # %fp-to-i-cleanup
+; RV32IF-NEXT:  .LBB18_13: # %entry
 ; RV32IF-NEXT:    neg a0, a0
-; RV32IF-NEXT:    and a0, a0, a4
-; RV32IF-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32IF-NEXT:    and a0, a0, a3
+; RV32IF-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IF-NEXT:    .cfi_restore ra
-; RV32IF-NEXT:    .cfi_restore s0
-; RV32IF-NEXT:    .cfi_restore s1
-; RV32IF-NEXT:    .cfi_restore s2
-; RV32IF-NEXT:    .cfi_restore s3
-; RV32IF-NEXT:    .cfi_restore s4
-; RV32IF-NEXT:    .cfi_restore s5
-; RV32IF-NEXT:    .cfi_restore s6
-; RV32IF-NEXT:    .cfi_restore s7
-; RV32IF-NEXT:    .cfi_restore s8
-; RV32IF-NEXT:    .cfi_restore s9
-; RV32IF-NEXT:    .cfi_restore s10
-; RV32IF-NEXT:    .cfi_restore s11
-; RV32IF-NEXT:    addi sp, sp, 128
+; RV32IF-NEXT:    addi sp, sp, 32
 ; RV32IF-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IF-NEXT:    ret
 ;
@@ -1445,327 +1187,64 @@ define i64 @stest_f64i64(double %x) {
 ; RV64IF-NEXT:    ret
 ;
 ; RV32IFD-LABEL: stest_f64i64:
-; RV32IFD:       # %bb.0: # %entryfp-to-i-entry
-; RV32IFD-NEXT:    addi sp, sp, -144
-; RV32IFD-NEXT:    .cfi_def_cfa_offset 144
-; RV32IFD-NEXT:    sw ra, 140(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s0, 136(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s1, 132(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s2, 128(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s3, 124(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s4, 120(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s5, 116(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s6, 112(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s7, 108(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s8, 104(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s9, 100(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s10, 96(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s11, 92(sp) # 4-byte Folded Spill
+; RV32IFD:       # %bb.0: # %entry
+; RV32IFD-NEXT:    addi sp, sp, -32
+; RV32IFD-NEXT:    .cfi_def_cfa_offset 32
+; RV32IFD-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IFD-NEXT:    .cfi_offset ra, -4
-; RV32IFD-NEXT:    .cfi_offset s0, -8
-; RV32IFD-NEXT:    .cfi_offset s1, -12
-; RV32IFD-NEXT:    .cfi_offset s2, -16
-; RV32IFD-NEXT:    .cfi_offset s3, -20
-; RV32IFD-NEXT:    .cfi_offset s4, -24
-; RV32IFD-NEXT:    .cfi_offset s5, -28
-; RV32IFD-NEXT:    .cfi_offset s6, -32
-; RV32IFD-NEXT:    .cfi_offset s7, -36
-; RV32IFD-NEXT:    .cfi_offset s8, -40
-; RV32IFD-NEXT:    .cfi_offset s9, -44
-; RV32IFD-NEXT:    .cfi_offset s10, -48
-; RV32IFD-NEXT:    .cfi_offset s11, -52
-; RV32IFD-NEXT:    fsd fa0, 16(sp)
-; RV32IFD-NEXT:    lw a2, 20(sp)
-; RV32IFD-NEXT:    slli a0, a2, 1
-; RV32IFD-NEXT:    srli a0, a0, 21
-; RV32IFD-NEXT:    li a1, 1023
-; RV32IFD-NEXT:    bgeu a0, a1, .LBB18_2
-; RV32IFD-NEXT:  # %bb.1:
-; RV32IFD-NEXT:    li s2, 0
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    li a0, 0
-; RV32IFD-NEXT:    li a2, 0
-; RV32IFD-NEXT:    j .LBB18_7
-; RV32IFD-NEXT:  .LBB18_2: # %fp-to-i-if-end
-; RV32IFD-NEXT:    addi a1, a0, -1151
-; RV32IFD-NEXT:    sltu a3, a1, a0
-; RV32IFD-NEXT:    sltiu a1, a1, -128
-; RV32IFD-NEXT:    or a1, a3, a1
-; RV32IFD-NEXT:    srli a3, a2, 31
-; RV32IFD-NEXT:    beqz a1, .LBB18_4
-; RV32IFD-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IFD-NEXT:    xori a0, a3, 1
-; RV32IFD-NEXT:    lui a2, 524288
-; RV32IFD-NEXT:    neg s2, a0
-; RV32IFD-NEXT:    sub a2, a2, a0
-; RV32IFD-NEXT:    mv a1, s2
-; RV32IFD-NEXT:    mv a0, s2
-; RV32IFD-NEXT:    j .LBB18_7
-; RV32IFD-NEXT:  .LBB18_4: # %fp-to-i-if-end9
-; RV32IFD-NEXT:    lw a1, 16(sp)
-; RV32IFD-NEXT:    neg s0, a3
-; RV32IFD-NEXT:    slli a2, a2, 12
-; RV32IFD-NEXT:    lui a3, 256
-; RV32IFD-NEXT:    srli a2, a2, 12
-; RV32IFD-NEXT:    or a2, a2, a3
-; RV32IFD-NEXT:    li a3, 1074
-; RV32IFD-NEXT:    ori s8, s0, 1
-; RV32IFD-NEXT:    bltu a3, a0, .LBB18_6
-; RV32IFD-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IFD-NEXT:    sw zero, 40(sp)
-; RV32IFD-NEXT:    sw zero, 44(sp)
-; RV32IFD-NEXT:    sw zero, 48(sp)
-; RV32IFD-NEXT:    sw zero, 52(sp)
-; RV32IFD-NEXT:    sw a1, 24(sp)
-; RV32IFD-NEXT:    sw a2, 28(sp)
-; RV32IFD-NEXT:    sw zero, 32(sp)
-; RV32IFD-NEXT:    sw zero, 36(sp)
-; RV32IFD-NEXT:    li a1, 1075
-; RV32IFD-NEXT:    addi a2, sp, 24
-; RV32IFD-NEXT:    sub a1, a1, a0
-; RV32IFD-NEXT:    srli a0, a1, 3
-; RV32IFD-NEXT:    andi a0, a0, 12
-; RV32IFD-NEXT:    add a0, a2, a0
-; RV32IFD-NEXT:    lw a2, 4(a0)
-; RV32IFD-NEXT:    lw a3, 8(a0)
-; RV32IFD-NEXT:    lw a4, 12(a0)
-; RV32IFD-NEXT:    lw a0, 0(a0)
-; RV32IFD-NEXT:    andi a5, a1, 31
-; RV32IFD-NEXT:    xori a5, a5, 31
-; RV32IFD-NEXT:    slli a6, a4, 1
-; RV32IFD-NEXT:    slli a7, a3, 1
-; RV32IFD-NEXT:    slli t0, a2, 1
-; RV32IFD-NEXT:    sll a6, a6, a5
-; RV32IFD-NEXT:    sll a7, a7, a5
-; RV32IFD-NEXT:    sll a5, t0, a5
-; RV32IFD-NEXT:    srl a3, a3, a1
-; RV32IFD-NEXT:    srl a2, a2, a1
-; RV32IFD-NEXT:    srl a0, a0, a1
-; RV32IFD-NEXT:    or a3, a3, a6
-; RV32IFD-NEXT:    sw a3, 12(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    or s5, a2, a7
-; RV32IFD-NEXT:    or s6, a0, a5
-; RV32IFD-NEXT:    srl s4, a4, a1
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s7, a1
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s7, a0, s7
-; RV32IFD-NEXT:    sltu a0, s7, a0
-; RV32IFD-NEXT:    add s9, a1, a0
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s10, a0, s7
-; RV32IFD-NEXT:    sltu a0, s10, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s11, s9, a0
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s1, a0
-; RV32IFD-NEXT:    mv s3, s8
-; RV32IFD-NEXT:    mv s8, a1
-; RV32IFD-NEXT:    add s7, a0, s11
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s6
-; RV32IFD-NEXT:    mv a3, s5
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    lw a2, 12(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    mv a3, s4
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv a2, a1
-; RV32IFD-NEXT:    mv a1, s10
-; RV32IFD-NEXT:    add a3, s5, a0
-; RV32IFD-NEXT:    sltu a4, s7, s1
-; RV32IFD-NEXT:    sltu a5, s11, s9
-; RV32IFD-NEXT:    add a2, s6, a2
-; RV32IFD-NEXT:    add a0, s7, a3
-; RV32IFD-NEXT:    add a5, s8, a5
-; RV32IFD-NEXT:    sltu a3, a3, s5
-; RV32IFD-NEXT:    sltu a6, a0, s7
-; RV32IFD-NEXT:    add a4, a5, a4
-; RV32IFD-NEXT:    add a2, a2, a3
-; RV32IFD-NEXT:    add a2, a4, a2
-; RV32IFD-NEXT:    add a2, a2, a6
-; RV32IFD-NEXT:    j .LBB18_7
-; RV32IFD-NEXT:  .LBB18_6: # %fp-to-i-if-else
-; RV32IFD-NEXT:    sw a1, 72(sp)
-; RV32IFD-NEXT:    sw a2, 76(sp)
-; RV32IFD-NEXT:    sw zero, 80(sp)
-; RV32IFD-NEXT:    sw zero, 84(sp)
-; RV32IFD-NEXT:    sw zero, 56(sp)
-; RV32IFD-NEXT:    sw zero, 60(sp)
-; RV32IFD-NEXT:    sw zero, 64(sp)
-; RV32IFD-NEXT:    sw zero, 68(sp)
-; RV32IFD-NEXT:    addi a0, a0, -1075
-; RV32IFD-NEXT:    addi a1, sp, 72
-; RV32IFD-NEXT:    srli a2, a0, 3
-; RV32IFD-NEXT:    andi a3, a0, 31
-; RV32IFD-NEXT:    andi a2, a2, 12
-; RV32IFD-NEXT:    xori a3, a3, 31
-; RV32IFD-NEXT:    sub a1, a1, a2
-; RV32IFD-NEXT:    lw a4, 0(a1)
-; RV32IFD-NEXT:    lw a2, 4(a1)
-; RV32IFD-NEXT:    lw a5, 8(a1)
-; RV32IFD-NEXT:    lw a1, 12(a1)
-; RV32IFD-NEXT:    srli a6, a4, 1
-; RV32IFD-NEXT:    srli a7, a2, 1
-; RV32IFD-NEXT:    srli t0, a5, 1
-; RV32IFD-NEXT:    srl a6, a6, a3
-; RV32IFD-NEXT:    srl a7, a7, a3
-; RV32IFD-NEXT:    srl a3, t0, a3
-; RV32IFD-NEXT:    sll a2, a2, a0
-; RV32IFD-NEXT:    sll a5, a5, a0
-; RV32IFD-NEXT:    sll a1, a1, a0
-; RV32IFD-NEXT:    or s3, a2, a6
-; RV32IFD-NEXT:    or a2, a5, a7
-; RV32IFD-NEXT:    or a3, a1, a3
-; RV32IFD-NEXT:    sll s4, a4, a0
-; RV32IFD-NEXT:    mv a0, s8
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s5, a1
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s4
-; RV32IFD-NEXT:    mv a3, s3
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a1, a1, s5
-; RV32IFD-NEXT:    add s1, a0, s2
-; RV32IFD-NEXT:    sltu a0, s1, a0
-; RV32IFD-NEXT:    add s7, a1, a0
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    add s8, s5, a1
-; RV32IFD-NEXT:    sltu a0, s8, s5
-; RV32IFD-NEXT:    add s6, s6, a0
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s8, a0, s8
-; RV32IFD-NEXT:    sltu a0, s8, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s4, s6, a0
-; RV32IFD-NEXT:    sltu s5, s4, s6
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv a2, a1
-; RV32IFD-NEXT:    mv a1, s8
-; RV32IFD-NEXT:    add a2, a2, s5
-; RV32IFD-NEXT:    add s4, a0, s4
-; RV32IFD-NEXT:    sltu a3, s4, a0
-; RV32IFD-NEXT:    add a0, s4, s1
-; RV32IFD-NEXT:    add a2, a2, a3
-; RV32IFD-NEXT:    add a2, a2, s7
-; RV32IFD-NEXT:    sltu a3, a0, s4
-; RV32IFD-NEXT:    add a2, a2, a3
-; RV32IFD-NEXT:  .LBB18_7: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    lui a3, 524288
-; RV32IFD-NEXT:    addi a4, a3, -1
-; RV32IFD-NEXT:    beq a1, a4, .LBB18_9
-; RV32IFD-NEXT:  # %bb.8: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    sltu a5, a1, a4
-; RV32IFD-NEXT:    or a6, a0, a2
-; RV32IFD-NEXT:    bnez a6, .LBB18_10
-; RV32IFD-NEXT:    j .LBB18_11
-; RV32IFD-NEXT:  .LBB18_9:
-; RV32IFD-NEXT:    sltiu a5, s2, -1
-; RV32IFD-NEXT:    or a6, a0, a2
-; RV32IFD-NEXT:    beqz a6, .LBB18_11
-; RV32IFD-NEXT:  .LBB18_10: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    srli a5, a2, 31
-; RV32IFD-NEXT:  .LBB18_11: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    neg a6, a5
-; RV32IFD-NEXT:    addi a7, a5, -1
-; RV32IFD-NEXT:    bnez a5, .LBB18_13
-; RV32IFD-NEXT:  # %bb.12: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    mv a1, a4
-; RV32IFD-NEXT:  .LBB18_13: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    or a4, a7, s2
-; RV32IFD-NEXT:    and a2, a6, a2
-; RV32IFD-NEXT:    and a5, a6, a0
-; RV32IFD-NEXT:    beq a1, a3, .LBB18_15
-; RV32IFD-NEXT:  # %bb.14: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    sltu a0, a3, a1
-; RV32IFD-NEXT:    j .LBB18_16
-; RV32IFD-NEXT:  .LBB18_15:
-; RV32IFD-NEXT:    snez a0, a4
-; RV32IFD-NEXT:  .LBB18_16: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    and a5, a5, a2
-; RV32IFD-NEXT:    li a3, -1
-; RV32IFD-NEXT:    beq a5, a3, .LBB18_18
-; RV32IFD-NEXT:  # %bb.17: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    srli a2, a2, 31
-; RV32IFD-NEXT:    xori a0, a2, 1
-; RV32IFD-NEXT:  .LBB18_18: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    bnez a0, .LBB18_20
-; RV32IFD-NEXT:  # %bb.19: # %fp-to-i-cleanup
+; RV32IFD-NEXT:    addi a0, sp, 8
+; RV32IFD-NEXT:    call __fixdfti
+; RV32IFD-NEXT:    lw a3, 8(sp)
+; RV32IFD-NEXT:    lw a1, 12(sp)
+; RV32IFD-NEXT:    lw a2, 16(sp)
+; RV32IFD-NEXT:    lw a4, 20(sp)
+; RV32IFD-NEXT:    lui a0, 524288
+; RV32IFD-NEXT:    addi a5, a0, -1
+; RV32IFD-NEXT:    beq a1, a5, .LBB18_2
+; RV32IFD-NEXT:  # %bb.1: # %entry
+; RV32IFD-NEXT:    sltu a6, a1, a5
+; RV32IFD-NEXT:    or a7, a2, a4
+; RV32IFD-NEXT:    bnez a7, .LBB18_3
+; RV32IFD-NEXT:    j .LBB18_4
+; RV32IFD-NEXT:  .LBB18_2:
+; RV32IFD-NEXT:    sltiu a6, a3, -1
+; RV32IFD-NEXT:    or a7, a2, a4
+; RV32IFD-NEXT:    beqz a7, .LBB18_4
+; RV32IFD-NEXT:  .LBB18_3: # %entry
+; RV32IFD-NEXT:    srli a6, a4, 31
+; RV32IFD-NEXT:  .LBB18_4: # %entry
+; RV32IFD-NEXT:    neg a7, a6
+; RV32IFD-NEXT:    addi t0, a6, -1
+; RV32IFD-NEXT:    bnez a6, .LBB18_6
+; RV32IFD-NEXT:  # %bb.5: # %entry
+; RV32IFD-NEXT:    mv a1, a5
+; RV32IFD-NEXT:  .LBB18_6: # %entry
+; RV32IFD-NEXT:    or a3, t0, a3
+; RV32IFD-NEXT:    and a4, a7, a4
+; RV32IFD-NEXT:    and a2, a7, a2
+; RV32IFD-NEXT:    beq a1, a0, .LBB18_8
+; RV32IFD-NEXT:  # %bb.7: # %entry
+; RV32IFD-NEXT:    sltu a0, a0, a1
+; RV32IFD-NEXT:    j .LBB18_9
+; RV32IFD-NEXT:  .LBB18_8:
+; RV32IFD-NEXT:    snez a0, a3
+; RV32IFD-NEXT:  .LBB18_9: # %entry
+; RV32IFD-NEXT:    and a2, a2, a4
+; RV32IFD-NEXT:    li a5, -1
+; RV32IFD-NEXT:    beq a2, a5, .LBB18_11
+; RV32IFD-NEXT:  # %bb.10: # %entry
+; RV32IFD-NEXT:    srli a4, a4, 31
+; RV32IFD-NEXT:    xori a0, a4, 1
+; RV32IFD-NEXT:  .LBB18_11: # %entry
+; RV32IFD-NEXT:    bnez a0, .LBB18_13
+; RV32IFD-NEXT:  # %bb.12: # %entry
 ; RV32IFD-NEXT:    lui a1, 524288
-; RV32IFD-NEXT:  .LBB18_20: # %fp-to-i-cleanup
+; RV32IFD-NEXT:  .LBB18_13: # %entry
 ; RV32IFD-NEXT:    neg a0, a0
-; RV32IFD-NEXT:    and a0, a0, a4
-; RV32IFD-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s1, 132(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s2, 128(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s3, 124(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s4, 120(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s5, 116(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s6, 112(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s7, 108(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s8, 104(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s9, 100(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s10, 96(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s11, 92(sp) # 4-byte Folded Reload
+; RV32IFD-NEXT:    and a0, a0, a3
+; RV32IFD-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IFD-NEXT:    .cfi_restore ra
-; RV32IFD-NEXT:    .cfi_restore s0
-; RV32IFD-NEXT:    .cfi_restore s1
-; RV32IFD-NEXT:    .cfi_restore s2
-; RV32IFD-NEXT:    .cfi_restore s3
-; RV32IFD-NEXT:    .cfi_restore s4
-; RV32IFD-NEXT:    .cfi_restore s5
-; RV32IFD-NEXT:    .cfi_restore s6
-; RV32IFD-NEXT:    .cfi_restore s7
-; RV32IFD-NEXT:    .cfi_restore s8
-; RV32IFD-NEXT:    .cfi_restore s9
-; RV32IFD-NEXT:    .cfi_restore s10
-; RV32IFD-NEXT:    .cfi_restore s11
-; RV32IFD-NEXT:    addi sp, sp, 144
+; RV32IFD-NEXT:    addi sp, sp, 32
 ; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IFD-NEXT:    ret
 ;
@@ -1789,286 +1268,32 @@ entry:
 
 define i64 @utest_f64i64(double %x) {
 ; RV32IF-LABEL: utest_f64i64:
-; RV32IF:       # %bb.0: # %entryfp-to-i-entry
-; RV32IF-NEXT:    addi sp, sp, -128
-; RV32IF-NEXT:    .cfi_def_cfa_offset 128
-; RV32IF-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32IF:       # %bb.0: # %entry
+; RV32IF-NEXT:    addi sp, sp, -32
+; RV32IF-NEXT:    .cfi_def_cfa_offset 32
+; RV32IF-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IF-NEXT:    .cfi_offset ra, -4
-; RV32IF-NEXT:    .cfi_offset s0, -8
-; RV32IF-NEXT:    .cfi_offset s1, -12
-; RV32IF-NEXT:    .cfi_offset s2, -16
-; RV32IF-NEXT:    .cfi_offset s3, -20
-; RV32IF-NEXT:    .cfi_offset s4, -24
-; RV32IF-NEXT:    .cfi_offset s5, -28
-; RV32IF-NEXT:    .cfi_offset s6, -32
-; RV32IF-NEXT:    .cfi_offset s7, -36
-; RV32IF-NEXT:    .cfi_offset s8, -40
-; RV32IF-NEXT:    .cfi_offset s9, -44
-; RV32IF-NEXT:    .cfi_offset s10, -48
-; RV32IF-NEXT:    .cfi_offset s11, -52
-; RV32IF-NEXT:    slli a2, a1, 1
-; RV32IF-NEXT:    srli a2, a2, 21
-; RV32IF-NEXT:    li a3, 1023
-; RV32IF-NEXT:    bgeu a2, a3, .LBB19_2
-; RV32IF-NEXT:  # %bb.1:
-; RV32IF-NEXT:    li s2, 0
-; RV32IF-NEXT:    li s9, 0
-; RV32IF-NEXT:    li a0, 0
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    j .LBB19_7
-; RV32IF-NEXT:  .LBB19_2: # %fp-to-i-if-end
-; RV32IF-NEXT:    addi a3, a2, -1151
-; RV32IF-NEXT:    sltu a4, a3, a2
-; RV32IF-NEXT:    sltiu a3, a3, -128
-; RV32IF-NEXT:    or a4, a4, a3
-; RV32IF-NEXT:    srli a3, a1, 31
-; RV32IF-NEXT:    beqz a4, .LBB19_4
-; RV32IF-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IF-NEXT:    xori a0, a3, 1
-; RV32IF-NEXT:    lui a1, 524288
-; RV32IF-NEXT:    neg s2, a0
-; RV32IF-NEXT:    sub a1, a1, a0
-; RV32IF-NEXT:    mv s9, s2
-; RV32IF-NEXT:    mv a0, s2
-; RV32IF-NEXT:    j .LBB19_7
-; RV32IF-NEXT:  .LBB19_4: # %fp-to-i-if-end9
-; RV32IF-NEXT:    neg s0, a3
-; RV32IF-NEXT:    slli a1, a1, 12
-; RV32IF-NEXT:    lui a3, 256
-; RV32IF-NEXT:    li a4, 1074
-; RV32IF-NEXT:    srli a1, a1, 12
-; RV32IF-NEXT:    or a1, a1, a3
-; RV32IF-NEXT:    ori s8, s0, 1
-; RV32IF-NEXT:    bltu a4, a2, .LBB19_6
-; RV32IF-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IF-NEXT:    sw zero, 24(sp)
-; RV32IF-NEXT:    sw zero, 28(sp)
-; RV32IF-NEXT:    sw zero, 32(sp)
-; RV32IF-NEXT:    sw zero, 36(sp)
-; RV32IF-NEXT:    sw a0, 8(sp)
-; RV32IF-NEXT:    sw a1, 12(sp)
-; RV32IF-NEXT:    sw zero, 16(sp)
-; RV32IF-NEXT:    sw zero, 20(sp)
-; RV32IF-NEXT:    li a0, 1075
-; RV32IF-NEXT:    addi a1, sp, 8
-; RV32IF-NEXT:    sub a0, a0, a2
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a3, 8(a1)
-; RV32IF-NEXT:    lw a4, 12(a1)
-; RV32IF-NEXT:    lw a1, 0(a1)
-; RV32IF-NEXT:    andi a5, a0, 31
-; RV32IF-NEXT:    xori a5, a5, 31
-; RV32IF-NEXT:    slli a6, a4, 1
-; RV32IF-NEXT:    slli a7, a3, 1
-; RV32IF-NEXT:    slli t0, a2, 1
-; RV32IF-NEXT:    sll a6, a6, a5
-; RV32IF-NEXT:    sll a7, a7, a5
-; RV32IF-NEXT:    sll a5, t0, a5
-; RV32IF-NEXT:    srl a3, a3, a0
-; RV32IF-NEXT:    srl a2, a2, a0
-; RV32IF-NEXT:    srl a1, a1, a0
-; RV32IF-NEXT:    or a3, a3, a6
-; RV32IF-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    or s5, a2, a7
-; RV32IF-NEXT:    or s6, a1, a5
-; RV32IF-NEXT:    srl s4, a4, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s7, a1
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s7, a0, s7
-; RV32IF-NEXT:    sltu a0, s7, a0
-; RV32IF-NEXT:    add s10, a1, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s9, a0, s7
-; RV32IF-NEXT:    sltu a0, s9, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s11, s10, a0
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s1, a0
-; RV32IF-NEXT:    mv s3, s8
-; RV32IF-NEXT:    mv s8, a1
-; RV32IF-NEXT:    add s7, a0, s11
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s6
-; RV32IF-NEXT:    mv a3, s5
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    mv a3, s4
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a2, s5, a0
-; RV32IF-NEXT:    sltu a3, s7, s1
-; RV32IF-NEXT:    sltu a4, s11, s10
-; RV32IF-NEXT:    add a1, s6, a1
-; RV32IF-NEXT:    add a0, s7, a2
-; RV32IF-NEXT:    add a4, s8, a4
-; RV32IF-NEXT:    sltu a2, a2, s5
-; RV32IF-NEXT:    sltu a5, a0, s7
-; RV32IF-NEXT:    add a3, a4, a3
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    add a1, a3, a1
-; RV32IF-NEXT:    add a1, a1, a5
-; RV32IF-NEXT:    j .LBB19_7
-; RV32IF-NEXT:  .LBB19_6: # %fp-to-i-if-else
-; RV32IF-NEXT:    sw a0, 56(sp)
-; RV32IF-NEXT:    sw a1, 60(sp)
-; RV32IF-NEXT:    sw zero, 64(sp)
-; RV32IF-NEXT:    sw zero, 68(sp)
-; RV32IF-NEXT:    sw zero, 40(sp)
-; RV32IF-NEXT:    sw zero, 44(sp)
-; RV32IF-NEXT:    sw zero, 48(sp)
-; RV32IF-NEXT:    sw zero, 52(sp)
-; RV32IF-NEXT:    addi a0, a2, -1075
-; RV32IF-NEXT:    addi a1, sp, 56
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a3, a0, 31
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    xori a3, a3, 31
-; RV32IF-NEXT:    sub a1, a1, a2
-; RV32IF-NEXT:    lw a4, 0(a1)
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a5, 8(a1)
-; RV32IF-NEXT:    lw a1, 12(a1)
-; RV32IF-NEXT:    srli a6, a4, 1
-; RV32IF-NEXT:    srli a7, a2, 1
-; RV32IF-NEXT:    srli t0, a5, 1
-; RV32IF-NEXT:    srl a6, a6, a3
-; RV32IF-NEXT:    srl a7, a7, a3
-; RV32IF-NEXT:    srl a3, t0, a3
-; RV32IF-NEXT:    sll a2, a2, a0
-; RV32IF-NEXT:    sll a5, a5, a0
-; RV32IF-NEXT:    sll a1, a1, a0
-; RV32IF-NEXT:    or s3, a2, a6
-; RV32IF-NEXT:    or a2, a5, a7
-; RV32IF-NEXT:    or a3, a1, a3
-; RV32IF-NEXT:    sll s4, a4, a0
-; RV32IF-NEXT:    mv a0, s8
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s5, a1
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s4
-; RV32IF-NEXT:    mv a3, s3
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a1, a1, s5
-; RV32IF-NEXT:    add s1, a0, s2
-; RV32IF-NEXT:    sltu a0, s1, a0
-; RV32IF-NEXT:    add s7, a1, a0
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    add s9, s5, a1
-; RV32IF-NEXT:    sltu a0, s9, s5
-; RV32IF-NEXT:    add s6, s6, a0
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s9, a0, s9
-; RV32IF-NEXT:    sltu a0, s9, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s4, s6, a0
-; RV32IF-NEXT:    sltu s5, s4, s6
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a1, a1, s5
-; RV32IF-NEXT:    add s4, a0, s4
-; RV32IF-NEXT:    sltu a2, s4, a0
-; RV32IF-NEXT:    add a0, s4, s1
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    add a1, a1, s7
-; RV32IF-NEXT:    sltu a2, a0, s4
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:  .LBB19_7: # %fp-to-i-cleanup
-; RV32IF-NEXT:    or a2, a1, a0
+; RV32IF-NEXT:    mv a2, a1
+; RV32IF-NEXT:    mv a1, a0
+; RV32IF-NEXT:    addi a0, sp, 8
+; RV32IF-NEXT:    call __fixunsdfti
+; RV32IF-NEXT:    lw a0, 16(sp)
+; RV32IF-NEXT:    lw a1, 20(sp)
+; RV32IF-NEXT:    lw a2, 12(sp)
+; RV32IF-NEXT:    lw a3, 8(sp)
+; RV32IF-NEXT:    or a4, a1, a0
 ; RV32IF-NEXT:    xori a0, a0, 1
-; RV32IF-NEXT:    seqz a2, a2
+; RV32IF-NEXT:    seqz a4, a4
 ; RV32IF-NEXT:    or a0, a0, a1
 ; RV32IF-NEXT:    seqz a0, a0
 ; RV32IF-NEXT:    addi a0, a0, -1
-; RV32IF-NEXT:    and a0, a0, a2
+; RV32IF-NEXT:    and a0, a0, a4
 ; RV32IF-NEXT:    neg a1, a0
-; RV32IF-NEXT:    and a0, a1, s2
-; RV32IF-NEXT:    and a1, a1, s9
-; RV32IF-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32IF-NEXT:    and a0, a1, a3
+; RV32IF-NEXT:    and a1, a1, a2
+; RV32IF-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IF-NEXT:    .cfi_restore ra
-; RV32IF-NEXT:    .cfi_restore s0
-; RV32IF-NEXT:    .cfi_restore s1
-; RV32IF-NEXT:    .cfi_restore s2
-; RV32IF-NEXT:    .cfi_restore s3
-; RV32IF-NEXT:    .cfi_restore s4
-; RV32IF-NEXT:    .cfi_restore s5
-; RV32IF-NEXT:    .cfi_restore s6
-; RV32IF-NEXT:    .cfi_restore s7
-; RV32IF-NEXT:    .cfi_restore s8
-; RV32IF-NEXT:    .cfi_restore s9
-; RV32IF-NEXT:    .cfi_restore s10
-; RV32IF-NEXT:    .cfi_restore s11
-; RV32IF-NEXT:    addi sp, sp, 128
+; RV32IF-NEXT:    addi sp, sp, 32
 ; RV32IF-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IF-NEXT:    ret
 ;
@@ -2089,289 +1314,30 @@ define i64 @utest_f64i64(double %x) {
 ; RV64-NEXT:    ret
 ;
 ; RV32IFD-LABEL: utest_f64i64:
-; RV32IFD:       # %bb.0: # %entryfp-to-i-entry
-; RV32IFD-NEXT:    addi sp, sp, -144
-; RV32IFD-NEXT:    .cfi_def_cfa_offset 144
-; RV32IFD-NEXT:    sw ra, 140(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s0, 136(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s1, 132(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s2, 128(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s3, 124(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s4, 120(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s5, 116(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s6, 112(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s7, 108(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s8, 104(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s9, 100(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s10, 96(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s11, 92(sp) # 4-byte Folded Spill
+; RV32IFD:       # %bb.0: # %entry
+; RV32IFD-NEXT:    addi sp, sp, -32
+; RV32IFD-NEXT:    .cfi_def_cfa_offset 32
+; RV32IFD-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IFD-NEXT:    .cfi_offset ra, -4
-; RV32IFD-NEXT:    .cfi_offset s0, -8
-; RV32IFD-NEXT:    .cfi_offset s1, -12
-; RV32IFD-NEXT:    .cfi_offset s2, -16
-; RV32IFD-NEXT:    .cfi_offset s3, -20
-; RV32IFD-NEXT:    .cfi_offset s4, -24
-; RV32IFD-NEXT:    .cfi_offset s5, -28
-; RV32IFD-NEXT:    .cfi_offset s6, -32
-; RV32IFD-NEXT:    .cfi_offset s7, -36
-; RV32IFD-NEXT:    .cfi_offset s8, -40
-; RV32IFD-NEXT:    .cfi_offset s9, -44
-; RV32IFD-NEXT:    .cfi_offset s10, -48
-; RV32IFD-NEXT:    .cfi_offset s11, -52
-; RV32IFD-NEXT:    fsd fa0, 16(sp)
-; RV32IFD-NEXT:    lw a2, 20(sp)
-; RV32IFD-NEXT:    slli a0, a2, 1
-; RV32IFD-NEXT:    srli a0, a0, 21
-; RV32IFD-NEXT:    li a1, 1023
-; RV32IFD-NEXT:    bgeu a0, a1, .LBB19_2
-; RV32IFD-NEXT:  # %bb.1:
-; RV32IFD-NEXT:    li s2, 0
-; RV32IFD-NEXT:    li s9, 0
-; RV32IFD-NEXT:    li a0, 0
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    j .LBB19_7
-; RV32IFD-NEXT:  .LBB19_2: # %fp-to-i-if-end
-; RV32IFD-NEXT:    addi a1, a0, -1151
-; RV32IFD-NEXT:    sltu a3, a1, a0
-; RV32IFD-NEXT:    sltiu a1, a1, -128
-; RV32IFD-NEXT:    or a1, a3, a1
-; RV32IFD-NEXT:    srli a3, a2, 31
-; RV32IFD-NEXT:    beqz a1, .LBB19_4
-; RV32IFD-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IFD-NEXT:    xori a0, a3, 1
-; RV32IFD-NEXT:    lui a1, 524288
-; RV32IFD-NEXT:    neg s2, a0
-; RV32IFD-NEXT:    sub a1, a1, a0
-; RV32IFD-NEXT:    mv s9, s2
-; RV32IFD-NEXT:    mv a0, s2
-; RV32IFD-NEXT:    j .LBB19_7
-; RV32IFD-NEXT:  .LBB19_4: # %fp-to-i-if-end9
-; RV32IFD-NEXT:    lw a1, 16(sp)
-; RV32IFD-NEXT:    neg s0, a3
-; RV32IFD-NEXT:    slli a2, a2, 12
-; RV32IFD-NEXT:    lui a3, 256
-; RV32IFD-NEXT:    srli a2, a2, 12
-; RV32IFD-NEXT:    or a2, a2, a3
-; RV32IFD-NEXT:    li a3, 1074
-; RV32IFD-NEXT:    ori s8, s0, 1
-; RV32IFD-NEXT:    bltu a3, a0, .LBB19_6
-; RV32IFD-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IFD-NEXT:    sw zero, 40(sp)
-; RV32IFD-NEXT:    sw zero, 44(sp)
-; RV32IFD-NEXT:    sw zero, 48(sp)
-; RV32IFD-NEXT:    sw zero, 52(sp)
-; RV32IFD-NEXT:    sw a1, 24(sp)
-; RV32IFD-NEXT:    sw a2, 28(sp)
-; RV32IFD-NEXT:    sw zero, 32(sp)
-; RV32IFD-NEXT:    sw zero, 36(sp)
-; RV32IFD-NEXT:    li a1, 1075
-; RV32IFD-NEXT:    addi a2, sp, 24
-; RV32IFD-NEXT:    sub a1, a1, a0
-; RV32IFD-NEXT:    srli a0, a1, 3
-; RV32IFD-NEXT:    andi a0, a0, 12
-; RV32IFD-NEXT:    add a0, a2, a0
-; RV32IFD-NEXT:    lw a2, 4(a0)
-; RV32IFD-NEXT:    lw a3, 8(a0)
-; RV32IFD-NEXT:    lw a4, 12(a0)
-; RV32IFD-NEXT:    lw a0, 0(a0)
-; RV32IFD-NEXT:    andi a5, a1, 31
-; RV32IFD-NEXT:    xori a5, a5, 31
-; RV32IFD-NEXT:    slli a6, a4, 1
-; RV32IFD-NEXT:    slli a7, a3, 1
-; RV32IFD-NEXT:    slli t0, a2, 1
-; RV32IFD-NEXT:    sll a6, a6, a5
-; RV32IFD-NEXT:    sll a7, a7, a5
-; RV32IFD-NEXT:    sll a5, t0, a5
-; RV32IFD-NEXT:    srl a3, a3, a1
-; RV32IFD-NEXT:    srl a2, a2, a1
-; RV32IFD-NEXT:    srl a0, a0, a1
-; RV32IFD-NEXT:    or a3, a3, a6
-; RV32IFD-NEXT:    sw a3, 12(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    or s5, a2, a7
-; RV32IFD-NEXT:    or s6, a0, a5
-; RV32IFD-NEXT:    srl s4, a4, a1
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s7, a1
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s7, a0, s7
-; RV32IFD-NEXT:    sltu a0, s7, a0
-; RV32IFD-NEXT:    add s10, a1, a0
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s9, a0, s7
-; RV32IFD-NEXT:    sltu a0, s9, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s11, s10, a0
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s1, a0
-; RV32IFD-NEXT:    mv s3, s8
-; RV32IFD-NEXT:    mv s8, a1
-; RV32IFD-NEXT:    add s7, a0, s11
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s6
-; RV32IFD-NEXT:    mv a3, s5
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    lw a2, 12(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    mv a3, s4
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a2, s5, a0
-; RV32IFD-NEXT:    sltu a3, s7, s1
-; RV32IFD-NEXT:    sltu a4, s11, s10
-; RV32IFD-NEXT:    add a1, s6, a1
-; RV32IFD-NEXT:    add a0, s7, a2
-; RV32IFD-NEXT:    add a4, s8, a4
-; RV32IFD-NEXT:    sltu a2, a2, s5
-; RV32IFD-NEXT:    sltu a5, a0, s7
-; RV32IFD-NEXT:    add a3, a4, a3
-; RV32IFD-NEXT:    add a1, a1, a2
-; RV32IFD-NEXT:    add a1, a3, a1
-; RV32IFD-NEXT:    add a1, a1, a5
-; RV32IFD-NEXT:    j .LBB19_7
-; RV32IFD-NEXT:  .LBB19_6: # %fp-to-i-if-else
-; RV32IFD-NEXT:    sw a1, 72(sp)
-; RV32IFD-NEXT:    sw a2, 76(sp)
-; RV32IFD-NEXT:    sw zero, 80(sp)
-; RV32IFD-NEXT:    sw zero, 84(sp)
-; RV32IFD-NEXT:    sw zero, 56(sp)
-; RV32IFD-NEXT:    sw zero, 60(sp)
-; RV32IFD-NEXT:    sw zero, 64(sp)
-; RV32IFD-NEXT:    sw zero, 68(sp)
-; RV32IFD-NEXT:    addi a0, a0, -1075
-; RV32IFD-NEXT:    addi a1, sp, 72
-; RV32IFD-NEXT:    srli a2, a0, 3
-; RV32IFD-NEXT:    andi a3, a0, 31
-; RV32IFD-NEXT:    andi a2, a2, 12
-; RV32IFD-NEXT:    xori a3, a3, 31
-; RV32IFD-NEXT:    sub a1, a1, a2
-; RV32IFD-NEXT:    lw a4, 0(a1)
-; RV32IFD-NEXT:    lw a2, 4(a1)
-; RV32IFD-NEXT:    lw a5, 8(a1)
-; RV32IFD-NEXT:    lw a1, 12(a1)
-; RV32IFD-NEXT:    srli a6, a4, 1
-; RV32IFD-NEXT:    srli a7, a2, 1
-; RV32IFD-NEXT:    srli t0, a5, 1
-; RV32IFD-NEXT:    srl a6, a6, a3
-; RV32IFD-NEXT:    srl a7, a7, a3
-; RV32IFD-NEXT:    srl a3, t0, a3
-; RV32IFD-NEXT:    sll a2, a2, a0
-; RV32IFD-NEXT:    sll a5, a5, a0
-; RV32IFD-NEXT:    sll a1, a1, a0
-; RV32IFD-NEXT:    or s3, a2, a6
-; RV32IFD-NEXT:    or a2, a5, a7
-; RV32IFD-NEXT:    or a3, a1, a3
-; RV32IFD-NEXT:    sll s4, a4, a0
-; RV32IFD-NEXT:    mv a0, s8
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s5, a1
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s4
-; RV32IFD-NEXT:    mv a3, s3
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a1, a1, s5
-; RV32IFD-NEXT:    add s1, a0, s2
-; RV32IFD-NEXT:    sltu a0, s1, a0
-; RV32IFD-NEXT:    add s7, a1, a0
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    add s9, s5, a1
-; RV32IFD-NEXT:    sltu a0, s9, s5
-; RV32IFD-NEXT:    add s6, s6, a0
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s9, a0, s9
-; RV32IFD-NEXT:    sltu a0, s9, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s4, s6, a0
-; RV32IFD-NEXT:    sltu s5, s4, s6
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a1, a1, s5
-; RV32IFD-NEXT:    add s4, a0, s4
-; RV32IFD-NEXT:    sltu a2, s4, a0
-; RV32IFD-NEXT:    add a0, s4, s1
-; RV32IFD-NEXT:    add a1, a1, a2
-; RV32IFD-NEXT:    add a1, a1, s7
-; RV32IFD-NEXT:    sltu a2, a0, s4
-; RV32IFD-NEXT:    add a1, a1, a2
-; RV32IFD-NEXT:  .LBB19_7: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    or a2, a1, a0
+; RV32IFD-NEXT:    addi a0, sp, 8
+; RV32IFD-NEXT:    call __fixunsdfti
+; RV32IFD-NEXT:    lw a0, 16(sp)
+; RV32IFD-NEXT:    lw a1, 20(sp)
+; RV32IFD-NEXT:    lw a2, 12(sp)
+; RV32IFD-NEXT:    lw a3, 8(sp)
+; RV32IFD-NEXT:    or a4, a1, a0
 ; RV32IFD-NEXT:    xori a0, a0, 1
-; RV32IFD-NEXT:    seqz a2, a2
+; RV32IFD-NEXT:    seqz a4, a4
 ; RV32IFD-NEXT:    or a0, a0, a1
 ; RV32IFD-NEXT:    seqz a0, a0
 ; RV32IFD-NEXT:    addi a0, a0, -1
-; RV32IFD-NEXT:    and a0, a0, a2
+; RV32IFD-NEXT:    and a0, a0, a4
 ; RV32IFD-NEXT:    neg a1, a0
-; RV32IFD-NEXT:    and a0, a1, s2
-; RV32IFD-NEXT:    and a1, a1, s9
-; RV32IFD-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s1, 132(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s2, 128(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s3, 124(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s4, 120(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s5, 116(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s6, 112(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s7, 108(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s8, 104(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s9, 100(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s10, 96(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s11, 92(sp) # 4-byte Folded Reload
+; RV32IFD-NEXT:    and a0, a1, a3
+; RV32IFD-NEXT:    and a1, a1, a2
+; RV32IFD-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IFD-NEXT:    .cfi_restore ra
-; RV32IFD-NEXT:    .cfi_restore s0
-; RV32IFD-NEXT:    .cfi_restore s1
-; RV32IFD-NEXT:    .cfi_restore s2
-; RV32IFD-NEXT:    .cfi_restore s3
-; RV32IFD-NEXT:    .cfi_restore s4
-; RV32IFD-NEXT:    .cfi_restore s5
-; RV32IFD-NEXT:    .cfi_restore s6
-; RV32IFD-NEXT:    .cfi_restore s7
-; RV32IFD-NEXT:    .cfi_restore s8
-; RV32IFD-NEXT:    .cfi_restore s9
-; RV32IFD-NEXT:    .cfi_restore s10
-; RV32IFD-NEXT:    .cfi_restore s11
-; RV32IFD-NEXT:    addi sp, sp, 144
+; RV32IFD-NEXT:    addi sp, sp, 32
 ; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IFD-NEXT:    ret
 entry:
@@ -2384,312 +1350,58 @@ entry:
 
 define i64 @ustest_f64i64(double %x) {
 ; RV32IF-LABEL: ustest_f64i64:
-; RV32IF:       # %bb.0: # %entryfp-to-i-entry
-; RV32IF-NEXT:    addi sp, sp, -128
-; RV32IF-NEXT:    .cfi_def_cfa_offset 128
-; RV32IF-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32IF:       # %bb.0: # %entry
+; RV32IF-NEXT:    addi sp, sp, -32
+; RV32IF-NEXT:    .cfi_def_cfa_offset 32
+; RV32IF-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IF-NEXT:    .cfi_offset ra, -4
-; RV32IF-NEXT:    .cfi_offset s0, -8
-; RV32IF-NEXT:    .cfi_offset s1, -12
-; RV32IF-NEXT:    .cfi_offset s2, -16
-; RV32IF-NEXT:    .cfi_offset s3, -20
-; RV32IF-NEXT:    .cfi_offset s4, -24
-; RV32IF-NEXT:    .cfi_offset s5, -28
-; RV32IF-NEXT:    .cfi_offset s6, -32
-; RV32IF-NEXT:    .cfi_offset s7, -36
-; RV32IF-NEXT:    .cfi_offset s8, -40
-; RV32IF-NEXT:    .cfi_offset s9, -44
-; RV32IF-NEXT:    .cfi_offset s10, -48
-; RV32IF-NEXT:    .cfi_offset s11, -52
-; RV32IF-NEXT:    slli a2, a1, 1
-; RV32IF-NEXT:    srli a2, a2, 21
-; RV32IF-NEXT:    li a3, 1023
-; RV32IF-NEXT:    bgeu a2, a3, .LBB20_2
-; RV32IF-NEXT:  # %bb.1:
-; RV32IF-NEXT:    li s2, 0
-; RV32IF-NEXT:    li s9, 0
-; RV32IF-NEXT:    li a0, 0
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    j .LBB20_6
-; RV32IF-NEXT:  .LBB20_2: # %fp-to-i-if-end
-; RV32IF-NEXT:    addi a3, a2, -1151
-; RV32IF-NEXT:    sltu a4, a3, a2
-; RV32IF-NEXT:    sltiu a3, a3, -128
-; RV32IF-NEXT:    or a4, a4, a3
-; RV32IF-NEXT:    srli a3, a1, 31
-; RV32IF-NEXT:    beqz a4, .LBB20_4
-; RV32IF-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IF-NEXT:    xori a0, a3, 1
-; RV32IF-NEXT:    lui a1, 524288
-; RV32IF-NEXT:    neg s2, a0
-; RV32IF-NEXT:    sub a1, a1, a0
-; RV32IF-NEXT:    mv s9, s2
-; RV32IF-NEXT:    mv a0, s2
-; RV32IF-NEXT:    beqz a1, .LBB20_6
-; RV32IF-NEXT:    j .LBB20_8
-; RV32IF-NEXT:  .LBB20_4: # %fp-to-i-if-end9
-; RV32IF-NEXT:    neg s0, a3
-; RV32IF-NEXT:    slli a1, a1, 12
-; RV32IF-NEXT:    lui a3, 256
-; RV32IF-NEXT:    li a4, 1074
-; RV32IF-NEXT:    srli a1, a1, 12
-; RV32IF-NEXT:    or a1, a1, a3
-; RV32IF-NEXT:    ori s8, s0, 1
-; RV32IF-NEXT:    bltu a4, a2, .LBB20_7
-; RV32IF-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IF-NEXT:    sw zero, 24(sp)
-; RV32IF-NEXT:    sw zero, 28(sp)
-; RV32IF-NEXT:    sw zero, 32(sp)
-; RV32IF-NEXT:    sw zero, 36(sp)
-; RV32IF-NEXT:    sw a0, 8(sp)
-; RV32IF-NEXT:    sw a1, 12(sp)
-; RV32IF-NEXT:    sw zero, 16(sp)
-; RV32IF-NEXT:    sw zero, 20(sp)
-; RV32IF-NEXT:    li a0, 1075
-; RV32IF-NEXT:    addi a1, sp, 8
-; RV32IF-NEXT:    sub a0, a0, a2
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a3, 8(a1)
-; RV32IF-NEXT:    lw a4, 12(a1)
-; RV32IF-NEXT:    lw a1, 0(a1)
-; RV32IF-NEXT:    andi a5, a0, 31
-; RV32IF-NEXT:    xori a5, a5, 31
-; RV32IF-NEXT:    slli a6, a4, 1
-; RV32IF-NEXT:    slli a7, a3, 1
-; RV32IF-NEXT:    slli t0, a2, 1
-; RV32IF-NEXT:    sll a6, a6, a5
-; RV32IF-NEXT:    sll a7, a7, a5
-; RV32IF-NEXT:    sll a5, t0, a5
-; RV32IF-NEXT:    srl a3, a3, a0
-; RV32IF-NEXT:    srl a2, a2, a0
-; RV32IF-NEXT:    srl a1, a1, a0
-; RV32IF-NEXT:    or a3, a3, a6
-; RV32IF-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    or s5, a2, a7
-; RV32IF-NEXT:    or s6, a1, a5
-; RV32IF-NEXT:    srl s4, a4, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s7, a1
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s7, a0, s7
-; RV32IF-NEXT:    sltu a0, s7, a0
-; RV32IF-NEXT:    add s10, a1, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s9, a0, s7
-; RV32IF-NEXT:    sltu a0, s9, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s11, s10, a0
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s1, a0
-; RV32IF-NEXT:    mv s3, s8
-; RV32IF-NEXT:    mv s8, a1
-; RV32IF-NEXT:    add s7, a0, s11
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s6
-; RV32IF-NEXT:    mv a3, s5
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    mv a3, s4
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a2, s5, a0
-; RV32IF-NEXT:    sltu a3, s7, s1
-; RV32IF-NEXT:    sltu a4, s11, s10
-; RV32IF-NEXT:    add a1, s6, a1
-; RV32IF-NEXT:    add a0, s7, a2
-; RV32IF-NEXT:    add a4, s8, a4
-; RV32IF-NEXT:    sltu a2, a2, s5
-; RV32IF-NEXT:    sltu a5, a0, s7
-; RV32IF-NEXT:    add a3, a4, a3
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    add a1, a3, a1
-; RV32IF-NEXT:    add a1, a1, a5
-; RV32IF-NEXT:    bnez a1, .LBB20_8
-; RV32IF-NEXT:  .LBB20_6:
-; RV32IF-NEXT:    seqz a2, a0
-; RV32IF-NEXT:    j .LBB20_9
-; RV32IF-NEXT:  .LBB20_7: # %fp-to-i-if-else
-; RV32IF-NEXT:    sw a0, 56(sp)
-; RV32IF-NEXT:    sw a1, 60(sp)
-; RV32IF-NEXT:    sw zero, 64(sp)
-; RV32IF-NEXT:    sw zero, 68(sp)
-; RV32IF-NEXT:    sw zero, 40(sp)
-; RV32IF-NEXT:    sw zero, 44(sp)
-; RV32IF-NEXT:    sw zero, 48(sp)
-; RV32IF-NEXT:    sw zero, 52(sp)
-; RV32IF-NEXT:    addi a0, a2, -1075
-; RV32IF-NEXT:    addi a1, sp, 56
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a3, a0, 31
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    xori a3, a3, 31
-; RV32IF-NEXT:    sub a1, a1, a2
-; RV32IF-NEXT:    lw a4, 0(a1)
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a5, 8(a1)
-; RV32IF-NEXT:    lw a1, 12(a1)
-; RV32IF-NEXT:    srli a6, a4, 1
-; RV32IF-NEXT:    srli a7, a2, 1
-; RV32IF-NEXT:    srli t0, a5, 1
-; RV32IF-NEXT:    srl a6, a6, a3
-; RV32IF-NEXT:    srl a7, a7, a3
-; RV32IF-NEXT:    srl a3, t0, a3
-; RV32IF-NEXT:    sll a2, a2, a0
-; RV32IF-NEXT:    sll a5, a5, a0
-; RV32IF-NEXT:    sll a1, a1, a0
-; RV32IF-NEXT:    or s3, a2, a6
-; RV32IF-NEXT:    or a2, a5, a7
-; RV32IF-NEXT:    or a3, a1, a3
-; RV32IF-NEXT:    sll s4, a4, a0
-; RV32IF-NEXT:    mv a0, s8
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s5, a1
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s4
-; RV32IF-NEXT:    mv a3, s3
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a1, a1, s5
-; RV32IF-NEXT:    add s1, a0, s2
-; RV32IF-NEXT:    sltu a0, s1, a0
-; RV32IF-NEXT:    add s7, a1, a0
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    add s9, s5, a1
-; RV32IF-NEXT:    sltu a0, s9, s5
-; RV32IF-NEXT:    add s6, s6, a0
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s9, a0, s9
-; RV32IF-NEXT:    sltu a0, s9, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s4, s6, a0
-; RV32IF-NEXT:    sltu s5, s4, s6
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a1, a1, s5
-; RV32IF-NEXT:    add s4, a0, s4
-; RV32IF-NEXT:    sltu a2, s4, a0
-; RV32IF-NEXT:    add a0, s4, s1
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    add a1, a1, s7
-; RV32IF-NEXT:    sltu a2, a0, s4
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    beqz a1, .LBB20_6
-; RV32IF-NEXT:  .LBB20_8: # %fp-to-i-cleanup
+; RV32IF-NEXT:    mv a2, a1
+; RV32IF-NEXT:    mv a1, a0
+; RV32IF-NEXT:    addi a0, sp, 8
+; RV32IF-NEXT:    call __fixdfti
+; RV32IF-NEXT:    lw a1, 20(sp)
+; RV32IF-NEXT:    lw a0, 16(sp)
+; RV32IF-NEXT:    beqz a1, .LBB20_2
+; RV32IF-NEXT:  # %bb.1: # %entry
 ; RV32IF-NEXT:    srli a2, a1, 31
-; RV32IF-NEXT:  .LBB20_9: # %fp-to-i-cleanup
+; RV32IF-NEXT:    j .LBB20_3
+; RV32IF-NEXT:  .LBB20_2:
+; RV32IF-NEXT:    seqz a2, a0
+; RV32IF-NEXT:  .LBB20_3: # %entry
 ; RV32IF-NEXT:    xori a3, a0, 1
 ; RV32IF-NEXT:    or a3, a3, a1
 ; RV32IF-NEXT:    seqz a3, a3
 ; RV32IF-NEXT:    addi a3, a3, -1
 ; RV32IF-NEXT:    and a3, a3, a2
 ; RV32IF-NEXT:    neg a2, a3
-; RV32IF-NEXT:    bnez a3, .LBB20_11
-; RV32IF-NEXT:  # %bb.10: # %fp-to-i-cleanup
+; RV32IF-NEXT:    bnez a3, .LBB20_5
+; RV32IF-NEXT:  # %bb.4: # %entry
 ; RV32IF-NEXT:    li a0, 1
-; RV32IF-NEXT:  .LBB20_11: # %fp-to-i-cleanup
-; RV32IF-NEXT:    and a4, a2, a1
-; RV32IF-NEXT:    beqz a4, .LBB20_13
-; RV32IF-NEXT:  # %bb.12: # %fp-to-i-cleanup
-; RV32IF-NEXT:    sgtz a1, a4
-; RV32IF-NEXT:    j .LBB20_14
-; RV32IF-NEXT:  .LBB20_13:
+; RV32IF-NEXT:  .LBB20_5: # %entry
+; RV32IF-NEXT:    lw a4, 8(sp)
+; RV32IF-NEXT:    lw a3, 12(sp)
+; RV32IF-NEXT:    and a5, a2, a1
+; RV32IF-NEXT:    beqz a5, .LBB20_7
+; RV32IF-NEXT:  # %bb.6: # %entry
+; RV32IF-NEXT:    sgtz a1, a5
+; RV32IF-NEXT:    j .LBB20_8
+; RV32IF-NEXT:  .LBB20_7:
+; RV32IF-NEXT:    snez a1, a0
+; RV32IF-NEXT:  .LBB20_8: # %entry
+; RV32IF-NEXT:    and a4, a2, a4
+; RV32IF-NEXT:    or a0, a0, a5
+; RV32IF-NEXT:    and a2, a2, a3
+; RV32IF-NEXT:    bnez a0, .LBB20_10
+; RV32IF-NEXT:  # %bb.9:
+; RV32IF-NEXT:    or a0, a4, a2
 ; RV32IF-NEXT:    snez a1, a0
-; RV32IF-NEXT:  .LBB20_14: # %fp-to-i-cleanup
-; RV32IF-NEXT:    and a3, a2, s9
-; RV32IF-NEXT:    or a4, a0, a4
-; RV32IF-NEXT:    and a0, a2, s2
-; RV32IF-NEXT:    bnez a4, .LBB20_16
-; RV32IF-NEXT:  # %bb.15:
-; RV32IF-NEXT:    or a1, a0, a3
-; RV32IF-NEXT:    snez a1, a1
-; RV32IF-NEXT:  .LBB20_16: # %fp-to-i-cleanup
+; RV32IF-NEXT:  .LBB20_10: # %entry
 ; RV32IF-NEXT:    neg a1, a1
-; RV32IF-NEXT:    and a0, a1, a0
-; RV32IF-NEXT:    and a1, a1, a3
-; RV32IF-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32IF-NEXT:    and a0, a1, a4
+; RV32IF-NEXT:    and a1, a1, a2
+; RV32IF-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IF-NEXT:    .cfi_restore ra
-; RV32IF-NEXT:    .cfi_restore s0
-; RV32IF-NEXT:    .cfi_restore s1
-; RV32IF-NEXT:    .cfi_restore s2
-; RV32IF-NEXT:    .cfi_restore s3
-; RV32IF-NEXT:    .cfi_restore s4
-; RV32IF-NEXT:    .cfi_restore s5
-; RV32IF-NEXT:    .cfi_restore s6
-; RV32IF-NEXT:    .cfi_restore s7
-; RV32IF-NEXT:    .cfi_restore s8
-; RV32IF-NEXT:    .cfi_restore s9
-; RV32IF-NEXT:    .cfi_restore s10
-; RV32IF-NEXT:    .cfi_restore s11
-; RV32IF-NEXT:    addi sp, sp, 128
+; RV32IF-NEXT:    addi sp, sp, 32
 ; RV32IF-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IF-NEXT:    ret
 ;
@@ -2723,315 +1435,56 @@ define i64 @ustest_f64i64(double %x) {
 ; RV64-NEXT:    ret
 ;
 ; RV32IFD-LABEL: ustest_f64i64:
-; RV32IFD:       # %bb.0: # %entryfp-to-i-entry
-; RV32IFD-NEXT:    addi sp, sp, -144
-; RV32IFD-NEXT:    .cfi_def_cfa_offset 144
-; RV32IFD-NEXT:    sw ra, 140(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s0, 136(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s1, 132(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s2, 128(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s3, 124(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s4, 120(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s5, 116(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s6, 112(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s7, 108(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s8, 104(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s9, 100(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s10, 96(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s11, 92(sp) # 4-byte Folded Spill
+; RV32IFD:       # %bb.0: # %entry
+; RV32IFD-NEXT:    addi sp, sp, -32
+; RV32IFD-NEXT:    .cfi_def_cfa_offset 32
+; RV32IFD-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IFD-NEXT:    .cfi_offset ra, -4
-; RV32IFD-NEXT:    .cfi_offset s0, -8
-; RV32IFD-NEXT:    .cfi_offset s1, -12
-; RV32IFD-NEXT:    .cfi_offset s2, -16
-; RV32IFD-NEXT:    .cfi_offset s3, -20
-; RV32IFD-NEXT:    .cfi_offset s4, -24
-; RV32IFD-NEXT:    .cfi_offset s5, -28
-; RV32IFD-NEXT:    .cfi_offset s6, -32
-; RV32IFD-NEXT:    .cfi_offset s7, -36
-; RV32IFD-NEXT:    .cfi_offset s8, -40
-; RV32IFD-NEXT:    .cfi_offset s9, -44
-; RV32IFD-NEXT:    .cfi_offset s10, -48
-; RV32IFD-NEXT:    .cfi_offset s11, -52
-; RV32IFD-NEXT:    fsd fa0, 16(sp)
-; RV32IFD-NEXT:    lw a2, 20(sp)
-; RV32IFD-NEXT:    slli a0, a2, 1
-; RV32IFD-NEXT:    srli a0, a0, 21
-; RV32IFD-NEXT:    li a1, 1023
-; RV32IFD-NEXT:    bgeu a0, a1, .LBB20_2
-; RV32IFD-NEXT:  # %bb.1:
-; RV32IFD-NEXT:    li s2, 0
-; RV32IFD-NEXT:    li s9, 0
-; RV32IFD-NEXT:    li a0, 0
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    j .LBB20_6
-; RV32IFD-NEXT:  .LBB20_2: # %fp-to-i-if-end
-; RV32IFD-NEXT:    addi a1, a0, -1151
-; RV32IFD-NEXT:    sltu a3, a1, a0
-; RV32IFD-NEXT:    sltiu a1, a1, -128
-; RV32IFD-NEXT:    or a1, a3, a1
-; RV32IFD-NEXT:    srli a3, a2, 31
-; RV32IFD-NEXT:    beqz a1, .LBB20_4
-; RV32IFD-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IFD-NEXT:    xori a0, a3, 1
-; RV32IFD-NEXT:    lui a1, 524288
-; RV32IFD-NEXT:    neg s2, a0
-; RV32IFD-NEXT:    sub a1, a1, a0
-; RV32IFD-NEXT:    mv s9, s2
-; RV32IFD-NEXT:    mv a0, s2
-; RV32IFD-NEXT:    beqz a1, .LBB20_6
-; RV32IFD-NEXT:    j .LBB20_8
-; RV32IFD-NEXT:  .LBB20_4: # %fp-to-i-if-end9
-; RV32IFD-NEXT:    lw a1, 16(sp)
-; RV32IFD-NEXT:    neg s0, a3
-; RV32IFD-NEXT:    slli a2, a2, 12
-; RV32IFD-NEXT:    lui a3, 256
-; RV32IFD-NEXT:    srli a2, a2, 12
-; RV32IFD-NEXT:    or a2, a2, a3
-; RV32IFD-NEXT:    li a3, 1074
-; RV32IFD-NEXT:    ori s8, s0, 1
-; RV32IFD-NEXT:    bltu a3, a0, .LBB20_7
-; RV32IFD-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IFD-NEXT:    sw zero, 40(sp)
-; RV32IFD-NEXT:    sw zero, 44(sp)
-; RV32IFD-NEXT:    sw zero, 48(sp)
-; RV32IFD-NEXT:    sw zero, 52(sp)
-; RV32IFD-NEXT:    sw a1, 24(sp)
-; RV32IFD-NEXT:    sw a2, 28(sp)
-; RV32IFD-NEXT:    sw zero, 32(sp)
-; RV32IFD-NEXT:    sw zero, 36(sp)
-; RV32IFD-NEXT:    li a1, 1075
-; RV32IFD-NEXT:    addi a2, sp, 24
-; RV32IFD-NEXT:    sub a1, a1, a0
-; RV32IFD-NEXT:    srli a0, a1, 3
-; RV32IFD-NEXT:    andi a0, a0, 12
-; RV32IFD-NEXT:    add a0, a2, a0
-; RV32IFD-NEXT:    lw a2, 4(a0)
-; RV32IFD-NEXT:    lw a3, 8(a0)
-; RV32IFD-NEXT:    lw a4, 12(a0)
-; RV32IFD-NEXT:    lw a0, 0(a0)
-; RV32IFD-NEXT:    andi a5, a1, 31
-; RV32IFD-NEXT:    xori a5, a5, 31
-; RV32IFD-NEXT:    slli a6, a4, 1
-; RV32IFD-NEXT:    slli a7, a3, 1
-; RV32IFD-NEXT:    slli t0, a2, 1
-; RV32IFD-NEXT:    sll a6, a6, a5
-; RV32IFD-NEXT:    sll a7, a7, a5
-; RV32IFD-NEXT:    sll a5, t0, a5
-; RV32IFD-NEXT:    srl a3, a3, a1
-; RV32IFD-NEXT:    srl a2, a2, a1
-; RV32IFD-NEXT:    srl a0, a0, a1
-; RV32IFD-NEXT:    or a3, a3, a6
-; RV32IFD-NEXT:    sw a3, 12(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    or s5, a2, a7
-; RV32IFD-NEXT:    or s6, a0, a5
-; RV32IFD-NEXT:    srl s4, a4, a1
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s7, a1
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s7, a0, s7
-; RV32IFD-NEXT:    sltu a0, s7, a0
-; RV32IFD-NEXT:    add s10, a1, a0
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s9, a0, s7
-; RV32IFD-NEXT:    sltu a0, s9, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s11, s10, a0
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s1, a0
-; RV32IFD-NEXT:    mv s3, s8
-; RV32IFD-NEXT:    mv s8, a1
-; RV32IFD-NEXT:    add s7, a0, s11
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s6
-; RV32IFD-NEXT:    mv a3, s5
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    lw a2, 12(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    mv a3, s4
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a2, s5, a0
-; RV32IFD-NEXT:    sltu a3, s7, s1
-; RV32IFD-NEXT:    sltu a4, s11, s10
-; RV32IFD-NEXT:    add a1, s6, a1
-; RV32IFD-NEXT:    add a0, s7, a2
-; RV32IFD-NEXT:    add a4, s8, a4
-; RV32IFD-NEXT:    sltu a2, a2, s5
-; RV32IFD-NEXT:    sltu a5, a0, s7
-; RV32IFD-NEXT:    add a3, a4, a3
-; RV32IFD-NEXT:    add a1, a1, a2
-; RV32IFD-NEXT:    add a1, a3, a1
-; RV32IFD-NEXT:    add a1, a1, a5
-; RV32IFD-NEXT:    bnez a1, .LBB20_8
-; RV32IFD-NEXT:  .LBB20_6:
-; RV32IFD-NEXT:    seqz a2, a0
-; RV32IFD-NEXT:    j .LBB20_9
-; RV32IFD-NEXT:  .LBB20_7: # %fp-to-i-if-else
-; RV32IFD-NEXT:    sw a1, 72(sp)
-; RV32IFD-NEXT:    sw a2, 76(sp)
-; RV32IFD-NEXT:    sw zero, 80(sp)
-; RV32IFD-NEXT:    sw zero, 84(sp)
-; RV32IFD-NEXT:    sw zero, 56(sp)
-; RV32IFD-NEXT:    sw zero, 60(sp)
-; RV32IFD-NEXT:    sw zero, 64(sp)
-; RV32IFD-NEXT:    sw zero, 68(sp)
-; RV32IFD-NEXT:    addi a0, a0, -1075
-; RV32IFD-NEXT:    addi a1, sp, 72
-; RV32IFD-NEXT:    srli a2, a0, 3
-; RV32IFD-NEXT:    andi a3, a0, 31
-; RV32IFD-NEXT:    andi a2, a2, 12
-; RV32IFD-NEXT:    xori a3, a3, 31
-; RV32IFD-NEXT:    sub a1, a1, a2
-; RV32IFD-NEXT:    lw a4, 0(a1)
-; RV32IFD-NEXT:    lw a2, 4(a1)
-; RV32IFD-NEXT:    lw a5, 8(a1)
-; RV32IFD-NEXT:    lw a1, 12(a1)
-; RV32IFD-NEXT:    srli a6, a4, 1
-; RV32IFD-NEXT:    srli a7, a2, 1
-; RV32IFD-NEXT:    srli t0, a5, 1
-; RV32IFD-NEXT:    srl a6, a6, a3
-; RV32IFD-NEXT:    srl a7, a7, a3
-; RV32IFD-NEXT:    srl a3, t0, a3
-; RV32IFD-NEXT:    sll a2, a2, a0
-; RV32IFD-NEXT:    sll a5, a5, a0
-; RV32IFD-NEXT:    sll a1, a1, a0
-; RV32IFD-NEXT:    or s3, a2, a6
-; RV32IFD-NEXT:    or a2, a5, a7
-; RV32IFD-NEXT:    or a3, a1, a3
-; RV32IFD-NEXT:    sll s4, a4, a0
-; RV32IFD-NEXT:    mv a0, s8
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s5, a1
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s4
-; RV32IFD-NEXT:    mv a3, s3
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a1, a1, s5
-; RV32IFD-NEXT:    add s1, a0, s2
-; RV32IFD-NEXT:    sltu a0, s1, a0
-; RV32IFD-NEXT:    add s7, a1, a0
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    add s9, s5, a1
-; RV32IFD-NEXT:    sltu a0, s9, s5
-; RV32IFD-NEXT:    add s6, s6, a0
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s9, a0, s9
-; RV32IFD-NEXT:    sltu a0, s9, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s4, s6, a0
-; RV32IFD-NEXT:    sltu s5, s4, s6
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a1, a1, s5
-; RV32IFD-NEXT:    add s4, a0, s4
-; RV32IFD-NEXT:    sltu a2, s4, a0
-; RV32IFD-NEXT:    add a0, s4, s1
-; RV32IFD-NEXT:    add a1, a1, a2
-; RV32IFD-NEXT:    add a1, a1, s7
-; RV32IFD-NEXT:    sltu a2, a0, s4
-; RV32IFD-NEXT:    add a1, a1, a2
-; RV32IFD-NEXT:    beqz a1, .LBB20_6
-; RV32IFD-NEXT:  .LBB20_8: # %fp-to-i-cleanup
+; RV32IFD-NEXT:    addi a0, sp, 8
+; RV32IFD-NEXT:    call __fixdfti
+; RV32IFD-NEXT:    lw a1, 20(sp)
+; RV32IFD-NEXT:    lw a0, 16(sp)
+; RV32IFD-NEXT:    beqz a1, .LBB20_2
+; RV32IFD-NEXT:  # %bb.1: # %entry
 ; RV32IFD-NEXT:    srli a2, a1, 31
-; RV32IFD-NEXT:  .LBB20_9: # %fp-to-i-cleanup
+; RV32IFD-NEXT:    j .LBB20_3
+; RV32IFD-NEXT:  .LBB20_2:
+; RV32IFD-NEXT:    seqz a2, a0
+; RV32IFD-NEXT:  .LBB20_3: # %entry
 ; RV32IFD-NEXT:    xori a3, a0, 1
 ; RV32IFD-NEXT:    or a3, a3, a1
 ; RV32IFD-NEXT:    seqz a3, a3
 ; RV32IFD-NEXT:    addi a3, a3, -1
 ; RV32IFD-NEXT:    and a3, a3, a2
 ; RV32IFD-NEXT:    neg a2, a3
-; RV32IFD-NEXT:    bnez a3, .LBB20_11
-; RV32IFD-NEXT:  # %bb.10: # %fp-to-i-cleanup
+; RV32IFD-NEXT:    bnez a3, .LBB20_5
+; RV32IFD-NEXT:  # %bb.4: # %entry
 ; RV32IFD-NEXT:    li a0, 1
-; RV32IFD-NEXT:  .LBB20_11: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    and a4, a2, a1
-; RV32IFD-NEXT:    beqz a4, .LBB20_13
-; RV32IFD-NEXT:  # %bb.12: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    sgtz a1, a4
-; RV32IFD-NEXT:    j .LBB20_14
-; RV32IFD-NEXT:  .LBB20_13:
+; RV32IFD-NEXT:  .LBB20_5: # %entry
+; RV32IFD-NEXT:    lw a4, 8(sp)
+; RV32IFD-NEXT:    lw a3, 12(sp)
+; RV32IFD-NEXT:    and a5, a2, a1
+; RV32IFD-NEXT:    beqz a5, .LBB20_7
+; RV32IFD-NEXT:  # %bb.6: # %entry
+; RV32IFD-NEXT:    sgtz a1, a5
+; RV32IFD-NEXT:    j .LBB20_8
+; RV32IFD-NEXT:  .LBB20_7:
 ; RV32IFD-NEXT:    snez a1, a0
-; RV32IFD-NEXT:  .LBB20_14: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    and a3, a2, s9
-; RV32IFD-NEXT:    or a4, a0, a4
-; RV32IFD-NEXT:    and a0, a2, s2
-; RV32IFD-NEXT:    bnez a4, .LBB20_16
-; RV32IFD-NEXT:  # %bb.15:
-; RV32IFD-NEXT:    or a1, a0, a3
-; RV32IFD-NEXT:    snez a1, a1
-; RV32IFD-NEXT:  .LBB20_16: # %fp-to-i-cleanup
+; RV32IFD-NEXT:  .LBB20_8: # %entry
+; RV32IFD-NEXT:    and a4, a2, a4
+; RV32IFD-NEXT:    or a0, a0, a5
+; RV32IFD-NEXT:    and a2, a2, a3
+; RV32IFD-NEXT:    bnez a0, .LBB20_10
+; RV32IFD-NEXT:  # %bb.9:
+; RV32IFD-NEXT:    or a0, a4, a2
+; RV32IFD-NEXT:    snez a1, a0
+; RV32IFD-NEXT:  .LBB20_10: # %entry
 ; RV32IFD-NEXT:    neg a1, a1
-; RV32IFD-NEXT:    and a0, a1, a0
-; RV32IFD-NEXT:    and a1, a1, a3
-; RV32IFD-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s1, 132(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s2, 128(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s3, 124(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s4, 120(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s5, 116(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s6, 112(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s7, 108(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s8, 104(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s9, 100(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s10, 96(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s11, 92(sp) # 4-byte Folded Reload
+; RV32IFD-NEXT:    and a0, a1, a4
+; RV32IFD-NEXT:    and a1, a1, a2
+; RV32IFD-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IFD-NEXT:    .cfi_restore ra
-; RV32IFD-NEXT:    .cfi_restore s0
-; RV32IFD-NEXT:    .cfi_restore s1
-; RV32IFD-NEXT:    .cfi_restore s2
-; RV32IFD-NEXT:    .cfi_restore s3
-; RV32IFD-NEXT:    .cfi_restore s4
-; RV32IFD-NEXT:    .cfi_restore s5
-; RV32IFD-NEXT:    .cfi_restore s6
-; RV32IFD-NEXT:    .cfi_restore s7
-; RV32IFD-NEXT:    .cfi_restore s8
-; RV32IFD-NEXT:    .cfi_restore s9
-; RV32IFD-NEXT:    .cfi_restore s10
-; RV32IFD-NEXT:    .cfi_restore s11
-; RV32IFD-NEXT:    addi sp, sp, 144
+; RV32IFD-NEXT:    addi sp, sp, 32
 ; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IFD-NEXT:    ret
 entry:
@@ -3046,325 +1499,64 @@ entry:
 
 define i64 @stest_f32i64(float %x) {
 ; RV32-LABEL: stest_f32i64:
-; RV32:       # %bb.0: # %entryfp-to-i-entry
-; RV32-NEXT:    addi sp, sp, -128
-; RV32-NEXT:    .cfi_def_cfa_offset 128
-; RV32-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32:       # %bb.0: # %entry
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    .cfi_offset s0, -8
-; RV32-NEXT:    .cfi_offset s1, -12
-; RV32-NEXT:    .cfi_offset s2, -16
-; RV32-NEXT:    .cfi_offset s3, -20
-; RV32-NEXT:    .cfi_offset s4, -24
-; RV32-NEXT:    .cfi_offset s5, -28
-; RV32-NEXT:    .cfi_offset s6, -32
-; RV32-NEXT:    .cfi_offset s7, -36
-; RV32-NEXT:    .cfi_offset s8, -40
-; RV32-NEXT:    .cfi_offset s9, -44
-; RV32-NEXT:    .cfi_offset s10, -48
-; RV32-NEXT:    .cfi_offset s11, -52
-; RV32-NEXT:    fmv.x.w a1, fa0
-; RV32-NEXT:    slli a0, a1, 1
-; RV32-NEXT:    srli a0, a0, 24
-; RV32-NEXT:    li a2, 127
-; RV32-NEXT:    bgeu a0, a2, .LBB21_2
-; RV32-NEXT:  # %bb.1:
-; RV32-NEXT:    li s2, 0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    li a0, 0
-; RV32-NEXT:    li a2, 0
-; RV32-NEXT:    j .LBB21_7
-; RV32-NEXT:  .LBB21_2: # %fp-to-i-if-end
-; RV32-NEXT:    addi a2, a0, -255
-; RV32-NEXT:    sltu a3, a2, a0
-; RV32-NEXT:    sltiu a2, a2, -128
-; RV32-NEXT:    or a2, a3, a2
-; RV32-NEXT:    beqz a2, .LBB21_4
-; RV32-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32-NEXT:    srli a1, a1, 31
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixsfti
+; RV32-NEXT:    lw a3, 8(sp)
+; RV32-NEXT:    lw a1, 12(sp)
+; RV32-NEXT:    lw a2, 16(sp)
+; RV32-NEXT:    lw a4, 20(sp)
 ; RV32-NEXT:    lui a0, 524288
-; RV32-NEXT:    xori a2, a1, 1
-; RV32-NEXT:    addi s2, a1, -1
-; RV32-NEXT:    sub a2, a0, a2
-; RV32-NEXT:    mv a1, s2
-; RV32-NEXT:    mv a0, s2
-; RV32-NEXT:    j .LBB21_7
-; RV32-NEXT:  .LBB21_4: # %fp-to-i-if-end9
-; RV32-NEXT:    srai s0, a1, 31
-; RV32-NEXT:    slli a1, a1, 9
-; RV32-NEXT:    lui a2, 2048
-; RV32-NEXT:    li a3, 149
-; RV32-NEXT:    srli a1, a1, 9
-; RV32-NEXT:    or a1, a1, a2
-; RV32-NEXT:    ori s8, s0, 1
-; RV32-NEXT:    bltu a3, a0, .LBB21_6
-; RV32-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32-NEXT:    sw zero, 24(sp)
-; RV32-NEXT:    sw zero, 28(sp)
-; RV32-NEXT:    sw zero, 32(sp)
-; RV32-NEXT:    sw zero, 36(sp)
-; RV32-NEXT:    sw a1, 8(sp)
-; RV32-NEXT:    sw zero, 12(sp)
-; RV32-NEXT:    sw zero, 16(sp)
-; RV32-NEXT:    sw zero, 20(sp)
-; RV32-NEXT:    li a1, 150
-; RV32-NEXT:    addi a2, sp, 8
-; RV32-NEXT:    sub a1, a1, a0
-; RV32-NEXT:    srli a0, a1, 3
-; RV32-NEXT:    andi a0, a0, 12
-; RV32-NEXT:    add a0, a2, a0
-; RV32-NEXT:    lw a2, 4(a0)
-; RV32-NEXT:    lw a3, 8(a0)
-; RV32-NEXT:    lw a4, 12(a0)
-; RV32-NEXT:    lw a0, 0(a0)
-; RV32-NEXT:    andi a5, a1, 31
-; RV32-NEXT:    xori a5, a5, 31
-; RV32-NEXT:    slli a6, a4, 1
-; RV32-NEXT:    slli a7, a3, 1
-; RV32-NEXT:    slli t0, a2, 1
-; RV32-NEXT:    sll a6, a6, a5
-; RV32-NEXT:    sll a7, a7, a5
-; RV32-NEXT:    sll a5, t0, a5
-; RV32-NEXT:    srl a3, a3, a1
-; RV32-NEXT:    srl a2, a2, a1
-; RV32-NEXT:    srl a0, a0, a1
-; RV32-NEXT:    or a3, a3, a6
-; RV32-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32-NEXT:    or s5, a2, a7
-; RV32-NEXT:    or s6, a0, a5
-; RV32-NEXT:    srl s4, a4, a1
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s7, a1
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s7, a0, s7
-; RV32-NEXT:    sltu a0, s7, a0
-; RV32-NEXT:    add s9, a1, a0
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s10, a0, s7
-; RV32-NEXT:    sltu a0, s10, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s11, s9, a0
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s1, a0
-; RV32-NEXT:    mv s3, s8
-; RV32-NEXT:    mv s8, a1
-; RV32-NEXT:    add s7, a0, s11
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s6
-; RV32-NEXT:    mv a3, s5
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a3, s4
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv a2, a1
-; RV32-NEXT:    mv a1, s10
-; RV32-NEXT:    add a3, s5, a0
-; RV32-NEXT:    sltu a4, s7, s1
-; RV32-NEXT:    sltu a5, s11, s9
-; RV32-NEXT:    add a2, s6, a2
-; RV32-NEXT:    add a0, s7, a3
-; RV32-NEXT:    add a5, s8, a5
-; RV32-NEXT:    sltu a3, a3, s5
-; RV32-NEXT:    sltu a6, a0, s7
-; RV32-NEXT:    add a4, a5, a4
-; RV32-NEXT:    add a2, a2, a3
-; RV32-NEXT:    add a2, a4, a2
-; RV32-NEXT:    add a2, a2, a6
-; RV32-NEXT:    j .LBB21_7
-; RV32-NEXT:  .LBB21_6: # %fp-to-i-if-else
-; RV32-NEXT:    sw a1, 56(sp)
-; RV32-NEXT:    sw zero, 60(sp)
-; RV32-NEXT:    sw zero, 64(sp)
-; RV32-NEXT:    sw zero, 68(sp)
-; RV32-NEXT:    sw zero, 40(sp)
-; RV32-NEXT:    sw zero, 44(sp)
-; RV32-NEXT:    sw zero, 48(sp)
-; RV32-NEXT:    sw zero, 52(sp)
-; RV32-NEXT:    addi a0, a0, -150
-; RV32-NEXT:    addi a1, sp, 56
-; RV32-NEXT:    srli a2, a0, 3
-; RV32-NEXT:    andi a3, a0, 31
-; RV32-NEXT:    andi a2, a2, 12
-; RV32-NEXT:    xori a3, a3, 31
-; RV32-NEXT:    sub a1, a1, a2
-; RV32-NEXT:    lw a4, 0(a1)
-; RV32-NEXT:    lw a2, 4(a1)
-; RV32-NEXT:    lw a5, 8(a1)
-; RV32-NEXT:    lw a1, 12(a1)
-; RV32-NEXT:    srli a6, a4, 1
-; RV32-NEXT:    srli a7, a2, 1
-; RV32-NEXT:    srli t0, a5, 1
-; RV32-NEXT:    srl a6, a6, a3
-; RV32-NEXT:    srl a7, a7, a3
-; RV32-NEXT:    srl a3, t0, a3
-; RV32-NEXT:    sll a2, a2, a0
-; RV32-NEXT:    sll a5, a5, a0
-; RV32-NEXT:    sll a1, a1, a0
-; RV32-NEXT:    or s3, a2, a6
-; RV32-NEXT:    or a2, a5, a7
-; RV32-NEXT:    or a3, a1, a3
-; RV32-NEXT:    sll s4, a4, a0
-; RV32-NEXT:    mv a0, s8
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s5, a1
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s4
-; RV32-NEXT:    mv a3, s3
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a1, a1, s5
-; RV32-NEXT:    add s1, a0, s2
-; RV32-NEXT:    sltu a0, s1, a0
-; RV32-NEXT:    add s7, a1, a0
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    add s8, s5, a1
-; RV32-NEXT:    sltu a0, s8, s5
-; RV32-NEXT:    add s6, s6, a0
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s8, a0, s8
-; RV32-NEXT:    sltu a0, s8, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s4, s6, a0
-; RV32-NEXT:    sltu s5, s4, s6
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv a2, a1
-; RV32-NEXT:    mv a1, s8
-; RV32-NEXT:    add a2, a2, s5
-; RV32-NEXT:    add s4, a0, s4
-; RV32-NEXT:    sltu a3, s4, a0
-; RV32-NEXT:    add a0, s4, s1
-; RV32-NEXT:    add a2, a2, a3
-; RV32-NEXT:    add a2, a2, s7
-; RV32-NEXT:    sltu a3, a0, s4
-; RV32-NEXT:    add a2, a2, a3
-; RV32-NEXT:  .LBB21_7: # %fp-to-i-cleanup
-; RV32-NEXT:    lui a3, 524288
-; RV32-NEXT:    addi a4, a3, -1
-; RV32-NEXT:    beq a1, a4, .LBB21_9
-; RV32-NEXT:  # %bb.8: # %fp-to-i-cleanup
-; RV32-NEXT:    sltu a5, a1, a4
-; RV32-NEXT:    or a6, a0, a2
-; RV32-NEXT:    bnez a6, .LBB21_10
-; RV32-NEXT:    j .LBB21_11
-; RV32-NEXT:  .LBB21_9:
-; RV32-NEXT:    sltiu a5, s2, -1
-; RV32-NEXT:    or a6, a0, a2
-; RV32-NEXT:    beqz a6, .LBB21_11
-; RV32-NEXT:  .LBB21_10: # %fp-to-i-cleanup
-; RV32-NEXT:    srli a5, a2, 31
-; RV32-NEXT:  .LBB21_11: # %fp-to-i-cleanup
-; RV32-NEXT:    neg a6, a5
-; RV32-NEXT:    addi a7, a5, -1
-; RV32-NEXT:    bnez a5, .LBB21_13
-; RV32-NEXT:  # %bb.12: # %fp-to-i-cleanup
-; RV32-NEXT:    mv a1, a4
-; RV32-NEXT:  .LBB21_13: # %fp-to-i-cleanup
-; RV32-NEXT:    or a4, a7, s2
-; RV32-NEXT:    and a2, a6, a2
-; RV32-NEXT:    and a5, a6, a0
-; RV32-NEXT:    beq a1, a3, .LBB21_15
-; RV32-NEXT:  # %bb.14: # %fp-to-i-cleanup
-; RV32-NEXT:    sltu a0, a3, a1
-; RV32-NEXT:    j .LBB21_16
-; RV32-NEXT:  .LBB21_15:
-; RV32-NEXT:    snez a0, a4
-; RV32-NEXT:  .LBB21_16: # %fp-to-i-cleanup
-; RV32-NEXT:    and a5, a5, a2
-; RV32-NEXT:    li a3, -1
-; RV32-NEXT:    beq a5, a3, .LBB21_18
-; RV32-NEXT:  # %bb.17: # %fp-to-i-cleanup
-; RV32-NEXT:    srli a2, a2, 31
-; RV32-NEXT:    xori a0, a2, 1
-; RV32-NEXT:  .LBB21_18: # %fp-to-i-cleanup
-; RV32-NEXT:    bnez a0, .LBB21_20
-; RV32-NEXT:  # %bb.19: # %fp-to-i-cleanup
+; RV32-NEXT:    addi a5, a0, -1
+; RV32-NEXT:    beq a1, a5, .LBB21_2
+; RV32-NEXT:  # %bb.1: # %entry
+; RV32-NEXT:    sltu a6, a1, a5
+; RV32-NEXT:    or a7, a2, a4
+; RV32-NEXT:    bnez a7, .LBB21_3
+; RV32-NEXT:    j .LBB21_4
+; RV32-NEXT:  .LBB21_2:
+; RV32-NEXT:    sltiu a6, a3, -1
+; RV32-NEXT:    or a7, a2, a4
+; RV32-NEXT:    beqz a7, .LBB21_4
+; RV32-NEXT:  .LBB21_3: # %entry
+; RV32-NEXT:    srli a6, a4, 31
+; RV32-NEXT:  .LBB21_4: # %entry
+; RV32-NEXT:    neg a7, a6
+; RV32-NEXT:    addi t0, a6, -1
+; RV32-NEXT:    bnez a6, .LBB21_6
+; RV32-NEXT:  # %bb.5: # %entry
+; RV32-NEXT:    mv a1, a5
+; RV32-NEXT:  .LBB21_6: # %entry
+; RV32-NEXT:    or a3, t0, a3
+; RV32-NEXT:    and a4, a7, a4
+; RV32-NEXT:    and a2, a7, a2
+; RV32-NEXT:    beq a1, a0, .LBB21_8
+; RV32-NEXT:  # %bb.7: # %entry
+; RV32-NEXT:    sltu a0, a0, a1
+; RV32-NEXT:    j .LBB21_9
+; RV32-NEXT:  .LBB21_8:
+; RV32-NEXT:    snez a0, a3
+; RV32-NEXT:  .LBB21_9: # %entry
+; RV32-NEXT:    and a2, a2, a4
+; RV32-NEXT:    li a5, -1
+; RV32-NEXT:    beq a2, a5, .LBB21_11
+; RV32-NEXT:  # %bb.10: # %entry
+; RV32-NEXT:    srli a4, a4, 31
+; RV32-NEXT:    xori a0, a4, 1
+; RV32-NEXT:  .LBB21_11: # %entry
+; RV32-NEXT:    bnez a0, .LBB21_13
+; RV32-NEXT:  # %bb.12: # %entry
 ; RV32-NEXT:    lui a1, 524288
-; RV32-NEXT:  .LBB21_20: # %fp-to-i-cleanup
+; RV32-NEXT:  .LBB21_13: # %entry
 ; RV32-NEXT:    neg a0, a0
-; RV32-NEXT:    and a0, a0, a4
-; RV32-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32-NEXT:    and a0, a0, a3
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    .cfi_restore s0
-; RV32-NEXT:    .cfi_restore s1
-; RV32-NEXT:    .cfi_restore s2
-; RV32-NEXT:    .cfi_restore s3
-; RV32-NEXT:    .cfi_restore s4
-; RV32-NEXT:    .cfi_restore s5
-; RV32-NEXT:    .cfi_restore s6
-; RV32-NEXT:    .cfi_restore s7
-; RV32-NEXT:    .cfi_restore s8
-; RV32-NEXT:    .cfi_restore s9
-; RV32-NEXT:    .cfi_restore s10
-; RV32-NEXT:    .cfi_restore s11
-; RV32-NEXT:    addi sp, sp, 128
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
@@ -3388,287 +1580,30 @@ entry:
 
 define i64 @utest_f32i64(float %x) {
 ; RV32-LABEL: utest_f32i64:
-; RV32:       # %bb.0: # %entryfp-to-i-entry
-; RV32-NEXT:    addi sp, sp, -128
-; RV32-NEXT:    .cfi_def_cfa_offset 128
-; RV32-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32:       # %bb.0: # %entry
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    .cfi_offset s0, -8
-; RV32-NEXT:    .cfi_offset s1, -12
-; RV32-NEXT:    .cfi_offset s2, -16
-; RV32-NEXT:    .cfi_offset s3, -20
-; RV32-NEXT:    .cfi_offset s4, -24
-; RV32-NEXT:    .cfi_offset s5, -28
-; RV32-NEXT:    .cfi_offset s6, -32
-; RV32-NEXT:    .cfi_offset s7, -36
-; RV32-NEXT:    .cfi_offset s8, -40
-; RV32-NEXT:    .cfi_offset s9, -44
-; RV32-NEXT:    .cfi_offset s10, -48
-; RV32-NEXT:    .cfi_offset s11, -52
-; RV32-NEXT:    fmv.x.w a1, fa0
-; RV32-NEXT:    slli a0, a1, 1
-; RV32-NEXT:    srli a0, a0, 24
-; RV32-NEXT:    li a2, 127
-; RV32-NEXT:    bgeu a0, a2, .LBB22_2
-; RV32-NEXT:  # %bb.1:
-; RV32-NEXT:    li s2, 0
-; RV32-NEXT:    li s9, 0
-; RV32-NEXT:    li a0, 0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    j .LBB22_7
-; RV32-NEXT:  .LBB22_2: # %fp-to-i-if-end
-; RV32-NEXT:    addi a2, a0, -255
-; RV32-NEXT:    sltu a3, a2, a0
-; RV32-NEXT:    sltiu a2, a2, -128
-; RV32-NEXT:    or a2, a3, a2
-; RV32-NEXT:    beqz a2, .LBB22_4
-; RV32-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32-NEXT:    srli a1, a1, 31
-; RV32-NEXT:    lui a0, 524288
-; RV32-NEXT:    xori a2, a1, 1
-; RV32-NEXT:    addi s2, a1, -1
-; RV32-NEXT:    sub a1, a0, a2
-; RV32-NEXT:    mv s9, s2
-; RV32-NEXT:    mv a0, s2
-; RV32-NEXT:    j .LBB22_7
-; RV32-NEXT:  .LBB22_4: # %fp-to-i-if-end9
-; RV32-NEXT:    srai s0, a1, 31
-; RV32-NEXT:    slli a1, a1, 9
-; RV32-NEXT:    lui a2, 2048
-; RV32-NEXT:    li a3, 149
-; RV32-NEXT:    srli a1, a1, 9
-; RV32-NEXT:    or a1, a1, a2
-; RV32-NEXT:    ori s8, s0, 1
-; RV32-NEXT:    bltu a3, a0, .LBB22_6
-; RV32-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32-NEXT:    sw zero, 24(sp)
-; RV32-NEXT:    sw zero, 28(sp)
-; RV32-NEXT:    sw zero, 32(sp)
-; RV32-NEXT:    sw zero, 36(sp)
-; RV32-NEXT:    sw a1, 8(sp)
-; RV32-NEXT:    sw zero, 12(sp)
-; RV32-NEXT:    sw zero, 16(sp)
-; RV32-NEXT:    sw zero, 20(sp)
-; RV32-NEXT:    li a1, 150
-; RV32-NEXT:    addi a2, sp, 8
-; RV32-NEXT:    sub a1, a1, a0
-; RV32-NEXT:    srli a0, a1, 3
-; RV32-NEXT:    andi a0, a0, 12
-; RV32-NEXT:    add a0, a2, a0
-; RV32-NEXT:    lw a2, 4(a0)
-; RV32-NEXT:    lw a3, 8(a0)
-; RV32-NEXT:    lw a4, 12(a0)
-; RV32-NEXT:    lw a0, 0(a0)
-; RV32-NEXT:    andi a5, a1, 31
-; RV32-NEXT:    xori a5, a5, 31
-; RV32-NEXT:    slli a6, a4, 1
-; RV32-NEXT:    slli a7, a3, 1
-; RV32-NEXT:    slli t0, a2, 1
-; RV32-NEXT:    sll a6, a6, a5
-; RV32-NEXT:    sll a7, a7, a5
-; RV32-NEXT:    sll a5, t0, a5
-; RV32-NEXT:    srl a3, a3, a1
-; RV32-NEXT:    srl a2, a2, a1
-; RV32-NEXT:    srl a0, a0, a1
-; RV32-NEXT:    or a3, a3, a6
-; RV32-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32-NEXT:    or s5, a2, a7
-; RV32-NEXT:    or s6, a0, a5
-; RV32-NEXT:    srl s4, a4, a1
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s7, a1
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s7, a0, s7
-; RV32-NEXT:    sltu a0, s7, a0
-; RV32-NEXT:    add s10, a1, a0
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s9, a0, s7
-; RV32-NEXT:    sltu a0, s9, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s11, s10, a0
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s1, a0
-; RV32-NEXT:    mv s3, s8
-; RV32-NEXT:    mv s8, a1
-; RV32-NEXT:    add s7, a0, s11
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s6
-; RV32-NEXT:    mv a3, s5
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a3, s4
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a2, s5, a0
-; RV32-NEXT:    sltu a3, s7, s1
-; RV32-NEXT:    sltu a4, s11, s10
-; RV32-NEXT:    add a1, s6, a1
-; RV32-NEXT:    add a0, s7, a2
-; RV32-NEXT:    add a4, s8, a4
-; RV32-NEXT:    sltu a2, a2, s5
-; RV32-NEXT:    sltu a5, a0, s7
-; RV32-NEXT:    add a3, a4, a3
-; RV32-NEXT:    add a1, a1, a2
-; RV32-NEXT:    add a1, a3, a1
-; RV32-NEXT:    add a1, a1, a5
-; RV32-NEXT:    j .LBB22_7
-; RV32-NEXT:  .LBB22_6: # %fp-to-i-if-else
-; RV32-NEXT:    sw a1, 56(sp)
-; RV32-NEXT:    sw zero, 60(sp)
-; RV32-NEXT:    sw zero, 64(sp)
-; RV32-NEXT:    sw zero, 68(sp)
-; RV32-NEXT:    sw zero, 40(sp)
-; RV32-NEXT:    sw zero, 44(sp)
-; RV32-NEXT:    sw zero, 48(sp)
-; RV32-NEXT:    sw zero, 52(sp)
-; RV32-NEXT:    addi a0, a0, -150
-; RV32-NEXT:    addi a1, sp, 56
-; RV32-NEXT:    srli a2, a0, 3
-; RV32-NEXT:    andi a3, a0, 31
-; RV32-NEXT:    andi a2, a2, 12
-; RV32-NEXT:    xori a3, a3, 31
-; RV32-NEXT:    sub a1, a1, a2
-; RV32-NEXT:    lw a4, 0(a1)
-; RV32-NEXT:    lw a2, 4(a1)
-; RV32-NEXT:    lw a5, 8(a1)
-; RV32-NEXT:    lw a1, 12(a1)
-; RV32-NEXT:    srli a6, a4, 1
-; RV32-NEXT:    srli a7, a2, 1
-; RV32-NEXT:    srli t0, a5, 1
-; RV32-NEXT:    srl a6, a6, a3
-; RV32-NEXT:    srl a7, a7, a3
-; RV32-NEXT:    srl a3, t0, a3
-; RV32-NEXT:    sll a2, a2, a0
-; RV32-NEXT:    sll a5, a5, a0
-; RV32-NEXT:    sll a1, a1, a0
-; RV32-NEXT:    or s3, a2, a6
-; RV32-NEXT:    or a2, a5, a7
-; RV32-NEXT:    or a3, a1, a3
-; RV32-NEXT:    sll s4, a4, a0
-; RV32-NEXT:    mv a0, s8
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s5, a1
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s4
-; RV32-NEXT:    mv a3, s3
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a1, a1, s5
-; RV32-NEXT:    add s1, a0, s2
-; RV32-NEXT:    sltu a0, s1, a0
-; RV32-NEXT:    add s7, a1, a0
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    add s9, s5, a1
-; RV32-NEXT:    sltu a0, s9, s5
-; RV32-NEXT:    add s6, s6, a0
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s9, a0, s9
-; RV32-NEXT:    sltu a0, s9, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s4, s6, a0
-; RV32-NEXT:    sltu s5, s4, s6
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a1, a1, s5
-; RV32-NEXT:    add s4, a0, s4
-; RV32-NEXT:    sltu a2, s4, a0
-; RV32-NEXT:    add a0, s4, s1
-; RV32-NEXT:    add a1, a1, a2
-; RV32-NEXT:    add a1, a1, s7
-; RV32-NEXT:    sltu a2, a0, s4
-; RV32-NEXT:    add a1, a1, a2
-; RV32-NEXT:  .LBB22_7: # %fp-to-i-cleanup
-; RV32-NEXT:    or a2, a1, a0
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixunssfti
+; RV32-NEXT:    lw a0, 16(sp)
+; RV32-NEXT:    lw a1, 20(sp)
+; RV32-NEXT:    lw a2, 12(sp)
+; RV32-NEXT:    lw a3, 8(sp)
+; RV32-NEXT:    or a4, a1, a0
 ; RV32-NEXT:    xori a0, a0, 1
-; RV32-NEXT:    seqz a2, a2
+; RV32-NEXT:    seqz a4, a4
 ; RV32-NEXT:    or a0, a0, a1
 ; RV32-NEXT:    seqz a0, a0
 ; RV32-NEXT:    addi a0, a0, -1
-; RV32-NEXT:    and a0, a0, a2
+; RV32-NEXT:    and a0, a0, a4
 ; RV32-NEXT:    neg a1, a0
-; RV32-NEXT:    and a0, a1, s2
-; RV32-NEXT:    and a1, a1, s9
-; RV32-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32-NEXT:    and a0, a1, a3
+; RV32-NEXT:    and a1, a1, a2
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    .cfi_restore s0
-; RV32-NEXT:    .cfi_restore s1
-; RV32-NEXT:    .cfi_restore s2
-; RV32-NEXT:    .cfi_restore s3
-; RV32-NEXT:    .cfi_restore s4
-; RV32-NEXT:    .cfi_restore s5
-; RV32-NEXT:    .cfi_restore s6
-; RV32-NEXT:    .cfi_restore s7
-; RV32-NEXT:    .cfi_restore s8
-; RV32-NEXT:    .cfi_restore s9
-; RV32-NEXT:    .cfi_restore s10
-; RV32-NEXT:    .cfi_restore s11
-; RV32-NEXT:    addi sp, sp, 128
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
@@ -3697,313 +1632,56 @@ entry:
 
 define i64 @ustest_f32i64(float %x) {
 ; RV32-LABEL: ustest_f32i64:
-; RV32:       # %bb.0: # %entryfp-to-i-entry
-; RV32-NEXT:    addi sp, sp, -128
-; RV32-NEXT:    .cfi_def_cfa_offset 128
-; RV32-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32:       # %bb.0: # %entry
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    .cfi_offset s0, -8
-; RV32-NEXT:    .cfi_offset s1, -12
-; RV32-NEXT:    .cfi_offset s2, -16
-; RV32-NEXT:    .cfi_offset s3, -20
-; RV32-NEXT:    .cfi_offset s4, -24
-; RV32-NEXT:    .cfi_offset s5, -28
-; RV32-NEXT:    .cfi_offset s6, -32
-; RV32-NEXT:    .cfi_offset s7, -36
-; RV32-NEXT:    .cfi_offset s8, -40
-; RV32-NEXT:    .cfi_offset s9, -44
-; RV32-NEXT:    .cfi_offset s10, -48
-; RV32-NEXT:    .cfi_offset s11, -52
-; RV32-NEXT:    fmv.x.w a1, fa0
-; RV32-NEXT:    slli a0, a1, 1
-; RV32-NEXT:    srli a0, a0, 24
-; RV32-NEXT:    li a2, 127
-; RV32-NEXT:    bgeu a0, a2, .LBB23_2
-; RV32-NEXT:  # %bb.1:
-; RV32-NEXT:    li s2, 0
-; RV32-NEXT:    li s9, 0
-; RV32-NEXT:    li a0, 0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    j .LBB23_6
-; RV32-NEXT:  .LBB23_2: # %fp-to-i-if-end
-; RV32-NEXT:    addi a2, a0, -255
-; RV32-NEXT:    sltu a3, a2, a0
-; RV32-NEXT:    sltiu a2, a2, -128
-; RV32-NEXT:    or a2, a3, a2
-; RV32-NEXT:    beqz a2, .LBB23_4
-; RV32-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32-NEXT:    srli a1, a1, 31
-; RV32-NEXT:    lui a0, 524288
-; RV32-NEXT:    xori a2, a1, 1
-; RV32-NEXT:    addi s2, a1, -1
-; RV32-NEXT:    sub a1, a0, a2
-; RV32-NEXT:    mv s9, s2
-; RV32-NEXT:    mv a0, s2
-; RV32-NEXT:    beqz a1, .LBB23_6
-; RV32-NEXT:    j .LBB23_8
-; RV32-NEXT:  .LBB23_4: # %fp-to-i-if-end9
-; RV32-NEXT:    srai s0, a1, 31
-; RV32-NEXT:    slli a1, a1, 9
-; RV32-NEXT:    lui a2, 2048
-; RV32-NEXT:    li a3, 149
-; RV32-NEXT:    srli a1, a1, 9
-; RV32-NEXT:    or a1, a1, a2
-; RV32-NEXT:    ori s8, s0, 1
-; RV32-NEXT:    bltu a3, a0, .LBB23_7
-; RV32-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32-NEXT:    sw zero, 24(sp)
-; RV32-NEXT:    sw zero, 28(sp)
-; RV32-NEXT:    sw zero, 32(sp)
-; RV32-NEXT:    sw zero, 36(sp)
-; RV32-NEXT:    sw a1, 8(sp)
-; RV32-NEXT:    sw zero, 12(sp)
-; RV32-NEXT:    sw zero, 16(sp)
-; RV32-NEXT:    sw zero, 20(sp)
-; RV32-NEXT:    li a1, 150
-; RV32-NEXT:    addi a2, sp, 8
-; RV32-NEXT:    sub a1, a1, a0
-; RV32-NEXT:    srli a0, a1, 3
-; RV32-NEXT:    andi a0, a0, 12
-; RV32-NEXT:    add a0, a2, a0
-; RV32-NEXT:    lw a2, 4(a0)
-; RV32-NEXT:    lw a3, 8(a0)
-; RV32-NEXT:    lw a4, 12(a0)
-; RV32-NEXT:    lw a0, 0(a0)
-; RV32-NEXT:    andi a5, a1, 31
-; RV32-NEXT:    xori a5, a5, 31
-; RV32-NEXT:    slli a6, a4, 1
-; RV32-NEXT:    slli a7, a3, 1
-; RV32-NEXT:    slli t0, a2, 1
-; RV32-NEXT:    sll a6, a6, a5
-; RV32-NEXT:    sll a7, a7, a5
-; RV32-NEXT:    sll a5, t0, a5
-; RV32-NEXT:    srl a3, a3, a1
-; RV32-NEXT:    srl a2, a2, a1
-; RV32-NEXT:    srl a0, a0, a1
-; RV32-NEXT:    or a3, a3, a6
-; RV32-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32-NEXT:    or s5, a2, a7
-; RV32-NEXT:    or s6, a0, a5
-; RV32-NEXT:    srl s4, a4, a1
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s7, a1
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s7, a0, s7
-; RV32-NEXT:    sltu a0, s7, a0
-; RV32-NEXT:    add s10, a1, a0
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s9, a0, s7
-; RV32-NEXT:    sltu a0, s9, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s11, s10, a0
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s1, a0
-; RV32-NEXT:    mv s3, s8
-; RV32-NEXT:    mv s8, a1
-; RV32-NEXT:    add s7, a0, s11
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s6
-; RV32-NEXT:    mv a3, s5
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a3, s4
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a2, s5, a0
-; RV32-NEXT:    sltu a3, s7, s1
-; RV32-NEXT:    sltu a4, s11, s10
-; RV32-NEXT:    add a1, s6, a1
-; RV32-NEXT:    add a0, s7, a2
-; RV32-NEXT:    add a4, s8, a4
-; RV32-NEXT:    sltu a2, a2, s5
-; RV32-NEXT:    sltu a5, a0, s7
-; RV32-NEXT:    add a3, a4, a3
-; RV32-NEXT:    add a1, a1, a2
-; RV32-NEXT:    add a1, a3, a1
-; RV32-NEXT:    add a1, a1, a5
-; RV32-NEXT:    bnez a1, .LBB23_8
-; RV32-NEXT:  .LBB23_6:
-; RV32-NEXT:    seqz a2, a0
-; RV32-NEXT:    j .LBB23_9
-; RV32-NEXT:  .LBB23_7: # %fp-to-i-if-else
-; RV32-NEXT:    sw a1, 56(sp)
-; RV32-NEXT:    sw zero, 60(sp)
-; RV32-NEXT:    sw zero, 64(sp)
-; RV32-NEXT:    sw zero, 68(sp)
-; RV32-NEXT:    sw zero, 40(sp)
-; RV32-NEXT:    sw zero, 44(sp)
-; RV32-NEXT:    sw zero, 48(sp)
-; RV32-NEXT:    sw zero, 52(sp)
-; RV32-NEXT:    addi a0, a0, -150
-; RV32-NEXT:    addi a1, sp, 56
-; RV32-NEXT:    srli a2, a0, 3
-; RV32-NEXT:    andi a3, a0, 31
-; RV32-NEXT:    andi a2, a2, 12
-; RV32-NEXT:    xori a3, a3, 31
-; RV32-NEXT:    sub a1, a1, a2
-; RV32-NEXT:    lw a4, 0(a1)
-; RV32-NEXT:    lw a2, 4(a1)
-; RV32-NEXT:    lw a5, 8(a1)
-; RV32-NEXT:    lw a1, 12(a1)
-; RV32-NEXT:    srli a6, a4, 1
-; RV32-NEXT:    srli a7, a2, 1
-; RV32-NEXT:    srli t0, a5, 1
-; RV32-NEXT:    srl a6, a6, a3
-; RV32-NEXT:    srl a7, a7, a3
-; RV32-NEXT:    srl a3, t0, a3
-; RV32-NEXT:    sll a2, a2, a0
-; RV32-NEXT:    sll a5, a5, a0
-; RV32-NEXT:    sll a1, a1, a0
-; RV32-NEXT:    or s3, a2, a6
-; RV32-NEXT:    or a2, a5, a7
-; RV32-NEXT:    or a3, a1, a3
-; RV32-NEXT:    sll s4, a4, a0
-; RV32-NEXT:    mv a0, s8
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s5, a1
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s4
-; RV32-NEXT:    mv a3, s3
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a1, a1, s5
-; RV32-NEXT:    add s1, a0, s2
-; RV32-NEXT:    sltu a0, s1, a0
-; RV32-NEXT:    add s7, a1, a0
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    add s9, s5, a1
-; RV32-NEXT:    sltu a0, s9, s5
-; RV32-NEXT:    add s6, s6, a0
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s9, a0, s9
-; RV32-NEXT:    sltu a0, s9, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s4, s6, a0
-; RV32-NEXT:    sltu s5, s4, s6
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a1, a1, s5
-; RV32-NEXT:    add s4, a0, s4
-; RV32-NEXT:    sltu a2, s4, a0
-; RV32-NEXT:    add a0, s4, s1
-; RV32-NEXT:    add a1, a1, a2
-; RV32-NEXT:    add a1, a1, s7
-; RV32-NEXT:    sltu a2, a0, s4
-; RV32-NEXT:    add a1, a1, a2
-; RV32-NEXT:    beqz a1, .LBB23_6
-; RV32-NEXT:  .LBB23_8: # %fp-to-i-cleanup
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixsfti
+; RV32-NEXT:    lw a1, 20(sp)
+; RV32-NEXT:    lw a0, 16(sp)
+; RV32-NEXT:    beqz a1, .LBB23_2
+; RV32-NEXT:  # %bb.1: # %entry
 ; RV32-NEXT:    srli a2, a1, 31
-; RV32-NEXT:  .LBB23_9: # %fp-to-i-cleanup
+; RV32-NEXT:    j .LBB23_3
+; RV32-NEXT:  .LBB23_2:
+; RV32-NEXT:    seqz a2, a0
+; RV32-NEXT:  .LBB23_3: # %entry
 ; RV32-NEXT:    xori a3, a0, 1
 ; RV32-NEXT:    or a3, a3, a1
 ; RV32-NEXT:    seqz a3, a3
 ; RV32-NEXT:    addi a3, a3, -1
 ; RV32-NEXT:    and a3, a3, a2
 ; RV32-NEXT:    neg a2, a3
-; RV32-NEXT:    bnez a3, .LBB23_11
-; RV32-NEXT:  # %bb.10: # %fp-to-i-cleanup
+; RV32-NEXT:    bnez a3, .LBB23_5
+; RV32-NEXT:  # %bb.4: # %entry
 ; RV32-NEXT:    li a0, 1
-; RV32-NEXT:  .LBB23_11: # %fp-to-i-cleanup
-; RV32-NEXT:    and a4, a2, a1
-; RV32-NEXT:    beqz a4, .LBB23_13
-; RV32-NEXT:  # %bb.12: # %fp-to-i-cleanup
-; RV32-NEXT:    sgtz a1, a4
-; RV32-NEXT:    j .LBB23_14
-; RV32-NEXT:  .LBB23_13:
+; RV32-NEXT:  .LBB23_5: # %entry
+; RV32-NEXT:    lw a4, 8(sp)
+; RV32-NEXT:    lw a3, 12(sp)
+; RV32-NEXT:    and a5, a2, a1
+; RV32-NEXT:    beqz a5, .LBB23_7
+; RV32-NEXT:  # %bb.6: # %entry
+; RV32-NEXT:    sgtz a1, a5
+; RV32-NEXT:    j .LBB23_8
+; RV32-NEXT:  .LBB23_7:
 ; RV32-NEXT:    snez a1, a0
-; RV32-NEXT:  .LBB23_14: # %fp-to-i-cleanup
-; RV32-NEXT:    and a3, a2, s9
-; RV32-NEXT:    or a4, a0, a4
-; RV32-NEXT:    and a0, a2, s2
-; RV32-NEXT:    bnez a4, .LBB23_16
-; RV32-NEXT:  # %bb.15:
-; RV32-NEXT:    or a1, a0, a3
-; RV32-NEXT:    snez a1, a1
-; RV32-NEXT:  .LBB23_16: # %fp-to-i-cleanup
+; RV32-NEXT:  .LBB23_8: # %entry
+; RV32-NEXT:    and a4, a2, a4
+; RV32-NEXT:    or a0, a0, a5
+; RV32-NEXT:    and a2, a2, a3
+; RV32-NEXT:    bnez a0, .LBB23_10
+; RV32-NEXT:  # %bb.9:
+; RV32-NEXT:    or a0, a4, a2
+; RV32-NEXT:    snez a1, a0
+; RV32-NEXT:  .LBB23_10: # %entry
 ; RV32-NEXT:    neg a1, a1
-; RV32-NEXT:    and a0, a1, a0
-; RV32-NEXT:    and a1, a1, a3
-; RV32-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32-NEXT:    and a0, a1, a4
+; RV32-NEXT:    and a1, a1, a2
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    .cfi_restore s0
-; RV32-NEXT:    .cfi_restore s1
-; RV32-NEXT:    .cfi_restore s2
-; RV32-NEXT:    .cfi_restore s3
-; RV32-NEXT:    .cfi_restore s4
-; RV32-NEXT:    .cfi_restore s5
-; RV32-NEXT:    .cfi_restore s6
-; RV32-NEXT:    .cfi_restore s7
-; RV32-NEXT:    .cfi_restore s8
-; RV32-NEXT:    .cfi_restore s9
-; RV32-NEXT:    .cfi_restore s10
-; RV32-NEXT:    .cfi_restore s11
-; RV32-NEXT:    addi sp, sp, 128
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
@@ -4048,58 +1726,64 @@ entry:
 define i64 @stest_f16i64(half %x) {
 ; RV32-LABEL: stest_f16i64:
 ; RV32:       # %bb.0: # %entry
-; RV32-NEXT:    addi sp, sp, -16
-; RV32-NEXT:    .cfi_def_cfa_offset 16
-; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
 ; RV32-NEXT:    call __extendhfsf2
-; RV32-NEXT:    fcvt.w.s a2, fa0, rtz
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixsfti
+; RV32-NEXT:    lw a3, 8(sp)
+; RV32-NEXT:    lw a1, 12(sp)
+; RV32-NEXT:    lw a2, 16(sp)
+; RV32-NEXT:    lw a4, 20(sp)
 ; RV32-NEXT:    lui a0, 524288
-; RV32-NEXT:    srai a3, a2, 31
-; RV32-NEXT:    addi a4, a0, -1
-; RV32-NEXT:    beq a3, a4, .LBB24_2
+; RV32-NEXT:    addi a5, a0, -1
+; RV32-NEXT:    beq a1, a5, .LBB24_2
 ; RV32-NEXT:  # %bb.1: # %entry
-; RV32-NEXT:    sltu a5, a3, a4
-; RV32-NEXT:    bnez a3, .LBB24_3
+; RV32-NEXT:    sltu a6, a1, a5
+; RV32-NEXT:    or a7, a2, a4
+; RV32-NEXT:    bnez a7, .LBB24_3
 ; RV32-NEXT:    j .LBB24_4
 ; RV32-NEXT:  .LBB24_2:
-; RV32-NEXT:    sltiu a5, a2, -1
-; RV32-NEXT:    beqz a3, .LBB24_4
+; RV32-NEXT:    sltiu a6, a3, -1
+; RV32-NEXT:    or a7, a2, a4
+; RV32-NEXT:    beqz a7, .LBB24_4
 ; RV32-NEXT:  .LBB24_3: # %entry
-; RV32-NEXT:    srli a5, a3, 31
+; RV32-NEXT:    srli a6, a4, 31
 ; RV32-NEXT:  .LBB24_4: # %entry
-; RV32-NEXT:    neg a6, a5
-; RV32-NEXT:    addi a7, a5, -1
-; RV32-NEXT:    mv a1, a3
-; RV32-NEXT:    bnez a5, .LBB24_6
+; RV32-NEXT:    neg a7, a6
+; RV32-NEXT:    addi t0, a6, -1
+; RV32-NEXT:    bnez a6, .LBB24_6
 ; RV32-NEXT:  # %bb.5: # %entry
-; RV32-NEXT:    mv a1, a4
+; RV32-NEXT:    mv a1, a5
 ; RV32-NEXT:  .LBB24_6: # %entry
-; RV32-NEXT:    or a2, a7, a2
-; RV32-NEXT:    and a3, a6, a3
+; RV32-NEXT:    or a3, t0, a3
+; RV32-NEXT:    and a4, a7, a4
+; RV32-NEXT:    and a2, a7, a2
 ; RV32-NEXT:    beq a1, a0, .LBB24_8
 ; RV32-NEXT:  # %bb.7: # %entry
 ; RV32-NEXT:    sltu a0, a0, a1
-; RV32-NEXT:    li a4, -1
-; RV32-NEXT:    bne a3, a4, .LBB24_9
-; RV32-NEXT:    j .LBB24_10
+; RV32-NEXT:    j .LBB24_9
 ; RV32-NEXT:  .LBB24_8:
-; RV32-NEXT:    snez a0, a2
-; RV32-NEXT:    li a4, -1
-; RV32-NEXT:    beq a3, a4, .LBB24_10
+; RV32-NEXT:    snez a0, a3
 ; RV32-NEXT:  .LBB24_9: # %entry
-; RV32-NEXT:    srli a3, a3, 31
-; RV32-NEXT:    xori a0, a3, 1
-; RV32-NEXT:  .LBB24_10: # %entry
-; RV32-NEXT:    bnez a0, .LBB24_12
-; RV32-NEXT:  # %bb.11: # %entry
+; RV32-NEXT:    and a2, a2, a4
+; RV32-NEXT:    li a5, -1
+; RV32-NEXT:    beq a2, a5, .LBB24_11
+; RV32-NEXT:  # %bb.10: # %entry
+; RV32-NEXT:    srli a4, a4, 31
+; RV32-NEXT:    xori a0, a4, 1
+; RV32-NEXT:  .LBB24_11: # %entry
+; RV32-NEXT:    bnez a0, .LBB24_13
+; RV32-NEXT:  # %bb.12: # %entry
 ; RV32-NEXT:    lui a1, 524288
-; RV32-NEXT:  .LBB24_12: # %entry
+; RV32-NEXT:  .LBB24_13: # %entry
 ; RV32-NEXT:    neg a0, a0
-; RV32-NEXT:    and a0, a0, a2
-; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32-NEXT:    and a0, a0, a3
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    addi sp, sp, 16
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
@@ -4157,16 +1841,30 @@ entry:
 define i64 @utesth_f16i64(half %x) {
 ; RV32-LABEL: utesth_f16i64:
 ; RV32:       # %bb.0: # %entry
-; RV32-NEXT:    addi sp, sp, -16
-; RV32-NEXT:    .cfi_def_cfa_offset 16
-; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
 ; RV32-NEXT:    call __extendhfsf2
-; RV32-NEXT:    fcvt.wu.s a0, fa0, rtz
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixunssfti
+; RV32-NEXT:    lw a0, 16(sp)
+; RV32-NEXT:    lw a1, 20(sp)
+; RV32-NEXT:    lw a2, 12(sp)
+; RV32-NEXT:    lw a3, 8(sp)
+; RV32-NEXT:    or a4, a1, a0
+; RV32-NEXT:    xori a0, a0, 1
+; RV32-NEXT:    seqz a4, a4
+; RV32-NEXT:    or a0, a0, a1
+; RV32-NEXT:    seqz a0, a0
+; RV32-NEXT:    addi a0, a0, -1
+; RV32-NEXT:    and a0, a0, a4
+; RV32-NEXT:    neg a1, a0
+; RV32-NEXT:    and a0, a1, a3
+; RV32-NEXT:    and a1, a1, a2
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    addi sp, sp, 16
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
@@ -4197,47 +1895,56 @@ entry:
 define i64 @ustest_f16i64(half %x) {
 ; RV32-LABEL: ustest_f16i64:
 ; RV32:       # %bb.0: # %entry
-; RV32-NEXT:    addi sp, sp, -16
-; RV32-NEXT:    .cfi_def_cfa_offset 16
-; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
 ; RV32-NEXT:    call __extendhfsf2
-; RV32-NEXT:    fcvt.w.s a0, fa0, rtz
-; RV32-NEXT:    srai a1, a0, 31
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixsfti
+; RV32-NEXT:    lw a1, 20(sp)
+; RV32-NEXT:    lw a0, 16(sp)
+; RV32-NEXT:    beqz a1, .LBB26_2
+; RV32-NEXT:  # %bb.1: # %entry
 ; RV32-NEXT:    srli a2, a1, 31
-; RV32-NEXT:    seqz a3, a1
-; RV32-NEXT:    ori a4, a1, 1
-; RV32-NEXT:    or a2, a3, a2
-; RV32-NEXT:    seqz a3, a4
+; RV32-NEXT:    j .LBB26_3
+; RV32-NEXT:  .LBB26_2:
+; RV32-NEXT:    seqz a2, a0
+; RV32-NEXT:  .LBB26_3: # %entry
+; RV32-NEXT:    xori a3, a0, 1
+; RV32-NEXT:    or a3, a3, a1
+; RV32-NEXT:    seqz a3, a3
 ; RV32-NEXT:    addi a3, a3, -1
-; RV32-NEXT:    and a4, a3, a2
-; RV32-NEXT:    neg a2, a4
-; RV32-NEXT:    mv a3, a1
-; RV32-NEXT:    bnez a4, .LBB26_2
-; RV32-NEXT:  # %bb.1: # %entry
-; RV32-NEXT:    li a3, 1
-; RV32-NEXT:  .LBB26_2: # %entry
-; RV32-NEXT:    and a1, a2, a1
-; RV32-NEXT:    beqz a1, .LBB26_4
-; RV32-NEXT:  # %bb.3: # %entry
-; RV32-NEXT:    sgtz a4, a1
-; RV32-NEXT:    j .LBB26_5
-; RV32-NEXT:  .LBB26_4:
-; RV32-NEXT:    snez a4, a3
+; RV32-NEXT:    and a3, a3, a2
+; RV32-NEXT:    neg a2, a3
+; RV32-NEXT:    bnez a3, .LBB26_5
+; RV32-NEXT:  # %bb.4: # %entry
+; RV32-NEXT:    li a0, 1
 ; RV32-NEXT:  .LBB26_5: # %entry
-; RV32-NEXT:    or a3, a3, a1
-; RV32-NEXT:    and a0, a2, a0
-; RV32-NEXT:    bnez a3, .LBB26_7
-; RV32-NEXT:  # %bb.6:
-; RV32-NEXT:    or a2, a0, a1
-; RV32-NEXT:    snez a4, a2
-; RV32-NEXT:  .LBB26_7: # %entry
-; RV32-NEXT:    neg a2, a4
-; RV32-NEXT:    and a0, a2, a0
-; RV32-NEXT:    and a1, a2, a1
-; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32-NEXT:    lw a4, 8(sp)
+; RV32-NEXT:    lw a3, 12(sp)
+; RV32-NEXT:    and a5, a2, a1
+; RV32-NEXT:    beqz a5, .LBB26_7
+; RV32-NEXT:  # %bb.6: # %entry
+; RV32-NEXT:    sgtz a1, a5
+; RV32-NEXT:    j .LBB26_8
+; RV32-NEXT:  .LBB26_7:
+; RV32-NEXT:    snez a1, a0
+; RV32-NEXT:  .LBB26_8: # %entry
+; RV32-NEXT:    and a4, a2, a4
+; RV32-NEXT:    or a0, a0, a5
+; RV32-NEXT:    and a2, a2, a3
+; RV32-NEXT:    bnez a0, .LBB26_10
+; RV32-NEXT:  # %bb.9:
+; RV32-NEXT:    or a0, a4, a2
+; RV32-NEXT:    snez a1, a0
+; RV32-NEXT:  .LBB26_10: # %entry
+; RV32-NEXT:    neg a1, a1
+; RV32-NEXT:    and a0, a1, a4
+; RV32-NEXT:    and a1, a1, a2
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    addi sp, sp, 16
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
@@ -5308,324 +3015,66 @@ entry:
 
 define i64 @stest_f64i64_mm(double %x) {
 ; RV32IF-LABEL: stest_f64i64_mm:
-; RV32IF:       # %bb.0: # %entryfp-to-i-entry
-; RV32IF-NEXT:    addi sp, sp, -128
-; RV32IF-NEXT:    .cfi_def_cfa_offset 128
-; RV32IF-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32IF:       # %bb.0: # %entry
+; RV32IF-NEXT:    addi sp, sp, -32
+; RV32IF-NEXT:    .cfi_def_cfa_offset 32
+; RV32IF-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IF-NEXT:    .cfi_offset ra, -4
-; RV32IF-NEXT:    .cfi_offset s0, -8
-; RV32IF-NEXT:    .cfi_offset s1, -12
-; RV32IF-NEXT:    .cfi_offset s2, -16
-; RV32IF-NEXT:    .cfi_offset s3, -20
-; RV32IF-NEXT:    .cfi_offset s4, -24
-; RV32IF-NEXT:    .cfi_offset s5, -28
-; RV32IF-NEXT:    .cfi_offset s6, -32
-; RV32IF-NEXT:    .cfi_offset s7, -36
-; RV32IF-NEXT:    .cfi_offset s8, -40
-; RV32IF-NEXT:    .cfi_offset s9, -44
-; RV32IF-NEXT:    .cfi_offset s10, -48
-; RV32IF-NEXT:    .cfi_offset s11, -52
-; RV32IF-NEXT:    slli a2, a1, 1
-; RV32IF-NEXT:    srli a2, a2, 21
-; RV32IF-NEXT:    li a3, 1023
-; RV32IF-NEXT:    bgeu a2, a3, .LBB45_2
-; RV32IF-NEXT:  # %bb.1:
-; RV32IF-NEXT:    li s2, 0
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    li a0, 0
-; RV32IF-NEXT:    li a2, 0
-; RV32IF-NEXT:    j .LBB45_7
-; RV32IF-NEXT:  .LBB45_2: # %fp-to-i-if-end
-; RV32IF-NEXT:    addi a3, a2, -1151
-; RV32IF-NEXT:    sltu a4, a3, a2
-; RV32IF-NEXT:    sltiu a3, a3, -128
-; RV32IF-NEXT:    or a4, a4, a3
-; RV32IF-NEXT:    srli a3, a1, 31
-; RV32IF-NEXT:    beqz a4, .LBB45_4
-; RV32IF-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IF-NEXT:    xori a0, a3, 1
-; RV32IF-NEXT:    lui a2, 524288
-; RV32IF-NEXT:    neg s2, a0
-; RV32IF-NEXT:    sub a2, a2, a0
-; RV32IF-NEXT:    mv a1, s2
-; RV32IF-NEXT:    mv a0, s2
-; RV32IF-NEXT:    j .LBB45_7
-; RV32IF-NEXT:  .LBB45_4: # %fp-to-i-if-end9
-; RV32IF-NEXT:    neg s0, a3
-; RV32IF-NEXT:    slli a1, a1, 12
-; RV32IF-NEXT:    lui a3, 256
-; RV32IF-NEXT:    li a4, 1074
-; RV32IF-NEXT:    srli a1, a1, 12
-; RV32IF-NEXT:    or a1, a1, a3
-; RV32IF-NEXT:    ori s8, s0, 1
-; RV32IF-NEXT:    bltu a4, a2, .LBB45_6
-; RV32IF-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IF-NEXT:    sw zero, 24(sp)
-; RV32IF-NEXT:    sw zero, 28(sp)
-; RV32IF-NEXT:    sw zero, 32(sp)
-; RV32IF-NEXT:    sw zero, 36(sp)
-; RV32IF-NEXT:    sw a0, 8(sp)
-; RV32IF-NEXT:    sw a1, 12(sp)
-; RV32IF-NEXT:    sw zero, 16(sp)
-; RV32IF-NEXT:    sw zero, 20(sp)
-; RV32IF-NEXT:    li a0, 1075
-; RV32IF-NEXT:    addi a1, sp, 8
-; RV32IF-NEXT:    sub a0, a0, a2
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a3, 8(a1)
-; RV32IF-NEXT:    lw a4, 12(a1)
-; RV32IF-NEXT:    lw a1, 0(a1)
-; RV32IF-NEXT:    andi a5, a0, 31
-; RV32IF-NEXT:    xori a5, a5, 31
-; RV32IF-NEXT:    slli a6, a4, 1
-; RV32IF-NEXT:    slli a7, a3, 1
-; RV32IF-NEXT:    slli t0, a2, 1
-; RV32IF-NEXT:    sll a6, a6, a5
-; RV32IF-NEXT:    sll a7, a7, a5
-; RV32IF-NEXT:    sll a5, t0, a5
-; RV32IF-NEXT:    srl a3, a3, a0
-; RV32IF-NEXT:    srl a2, a2, a0
-; RV32IF-NEXT:    srl a1, a1, a0
-; RV32IF-NEXT:    or a3, a3, a6
-; RV32IF-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    or s5, a2, a7
-; RV32IF-NEXT:    or s6, a1, a5
-; RV32IF-NEXT:    srl s4, a4, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s7, a1
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s7, a0, s7
-; RV32IF-NEXT:    sltu a0, s7, a0
-; RV32IF-NEXT:    add s9, a1, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s10, a0, s7
-; RV32IF-NEXT:    sltu a0, s10, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s11, s9, a0
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s1, a0
-; RV32IF-NEXT:    mv s3, s8
-; RV32IF-NEXT:    mv s8, a1
-; RV32IF-NEXT:    add s7, a0, s11
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s6
-; RV32IF-NEXT:    mv a3, s5
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    mv a3, s4
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv a2, a1
-; RV32IF-NEXT:    mv a1, s10
-; RV32IF-NEXT:    add a3, s5, a0
-; RV32IF-NEXT:    sltu a4, s7, s1
-; RV32IF-NEXT:    sltu a5, s11, s9
-; RV32IF-NEXT:    add a2, s6, a2
-; RV32IF-NEXT:    add a0, s7, a3
-; RV32IF-NEXT:    add a5, s8, a5
-; RV32IF-NEXT:    sltu a3, a3, s5
-; RV32IF-NEXT:    sltu a6, a0, s7
-; RV32IF-NEXT:    add a4, a5, a4
-; RV32IF-NEXT:    add a2, a2, a3
-; RV32IF-NEXT:    add a2, a4, a2
-; RV32IF-NEXT:    add a2, a2, a6
-; RV32IF-NEXT:    j .LBB45_7
-; RV32IF-NEXT:  .LBB45_6: # %fp-to-i-if-else
-; RV32IF-NEXT:    sw a0, 56(sp)
-; RV32IF-NEXT:    sw a1, 60(sp)
-; RV32IF-NEXT:    sw zero, 64(sp)
-; RV32IF-NEXT:    sw zero, 68(sp)
-; RV32IF-NEXT:    sw zero, 40(sp)
-; RV32IF-NEXT:    sw zero, 44(sp)
-; RV32IF-NEXT:    sw zero, 48(sp)
-; RV32IF-NEXT:    sw zero, 52(sp)
-; RV32IF-NEXT:    addi a0, a2, -1075
-; RV32IF-NEXT:    addi a1, sp, 56
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a3, a0, 31
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    xori a3, a3, 31
-; RV32IF-NEXT:    sub a1, a1, a2
-; RV32IF-NEXT:    lw a4, 0(a1)
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a5, 8(a1)
-; RV32IF-NEXT:    lw a1, 12(a1)
-; RV32IF-NEXT:    srli a6, a4, 1
-; RV32IF-NEXT:    srli a7, a2, 1
-; RV32IF-NEXT:    srli t0, a5, 1
-; RV32IF-NEXT:    srl a6, a6, a3
-; RV32IF-NEXT:    srl a7, a7, a3
-; RV32IF-NEXT:    srl a3, t0, a3
-; RV32IF-NEXT:    sll a2, a2, a0
-; RV32IF-NEXT:    sll a5, a5, a0
-; RV32IF-NEXT:    sll a1, a1, a0
-; RV32IF-NEXT:    or s3, a2, a6
-; RV32IF-NEXT:    or a2, a5, a7
-; RV32IF-NEXT:    or a3, a1, a3
-; RV32IF-NEXT:    sll s4, a4, a0
-; RV32IF-NEXT:    mv a0, s8
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s5, a1
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s4
-; RV32IF-NEXT:    mv a3, s3
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a1, a1, s5
-; RV32IF-NEXT:    add s1, a0, s2
-; RV32IF-NEXT:    sltu a0, s1, a0
-; RV32IF-NEXT:    add s7, a1, a0
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    add s8, s5, a1
-; RV32IF-NEXT:    sltu a0, s8, s5
-; RV32IF-NEXT:    add s6, s6, a0
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s8, a0, s8
-; RV32IF-NEXT:    sltu a0, s8, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s4, s6, a0
-; RV32IF-NEXT:    sltu s5, s4, s6
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
 ; RV32IF-NEXT:    mv a2, a1
-; RV32IF-NEXT:    mv a1, s8
-; RV32IF-NEXT:    add a2, a2, s5
-; RV32IF-NEXT:    add s4, a0, s4
-; RV32IF-NEXT:    sltu a3, s4, a0
-; RV32IF-NEXT:    add a0, s4, s1
-; RV32IF-NEXT:    add a2, a2, a3
-; RV32IF-NEXT:    add a2, a2, s7
-; RV32IF-NEXT:    sltu a3, a0, s4
-; RV32IF-NEXT:    add a2, a2, a3
-; RV32IF-NEXT:  .LBB45_7: # %fp-to-i-cleanup
-; RV32IF-NEXT:    lui a3, 524288
-; RV32IF-NEXT:    addi a4, a3, -1
-; RV32IF-NEXT:    beq a1, a4, .LBB45_9
-; RV32IF-NEXT:  # %bb.8: # %fp-to-i-cleanup
-; RV32IF-NEXT:    sltu a5, a1, a4
-; RV32IF-NEXT:    or a6, a0, a2
-; RV32IF-NEXT:    bnez a6, .LBB45_10
-; RV32IF-NEXT:    j .LBB45_11
-; RV32IF-NEXT:  .LBB45_9:
-; RV32IF-NEXT:    sltiu a5, s2, -1
-; RV32IF-NEXT:    or a6, a0, a2
-; RV32IF-NEXT:    beqz a6, .LBB45_11
-; RV32IF-NEXT:  .LBB45_10: # %fp-to-i-cleanup
-; RV32IF-NEXT:    srli a5, a2, 31
-; RV32IF-NEXT:  .LBB45_11: # %fp-to-i-cleanup
-; RV32IF-NEXT:    neg a6, a5
-; RV32IF-NEXT:    addi a7, a5, -1
-; RV32IF-NEXT:    bnez a5, .LBB45_13
-; RV32IF-NEXT:  # %bb.12: # %fp-to-i-cleanup
-; RV32IF-NEXT:    mv a1, a4
-; RV32IF-NEXT:  .LBB45_13: # %fp-to-i-cleanup
-; RV32IF-NEXT:    or a4, a7, s2
-; RV32IF-NEXT:    and a2, a6, a2
-; RV32IF-NEXT:    and a5, a6, a0
-; RV32IF-NEXT:    beq a1, a3, .LBB45_15
-; RV32IF-NEXT:  # %bb.14: # %fp-to-i-cleanup
-; RV32IF-NEXT:    sltu a0, a3, a1
-; RV32IF-NEXT:    j .LBB45_16
-; RV32IF-NEXT:  .LBB45_15:
-; RV32IF-NEXT:    snez a0, a4
-; RV32IF-NEXT:  .LBB45_16: # %fp-to-i-cleanup
-; RV32IF-NEXT:    and a5, a5, a2
-; RV32IF-NEXT:    li a3, -1
-; RV32IF-NEXT:    beq a5, a3, .LBB45_18
-; RV32IF-NEXT:  # %bb.17: # %fp-to-i-cleanup
-; RV32IF-NEXT:    srli a2, a2, 31
-; RV32IF-NEXT:    xori a0, a2, 1
-; RV32IF-NEXT:  .LBB45_18: # %fp-to-i-cleanup
-; RV32IF-NEXT:    bnez a0, .LBB45_20
-; RV32IF-NEXT:  # %bb.19: # %fp-to-i-cleanup
+; RV32IF-NEXT:    mv a1, a0
+; RV32IF-NEXT:    addi a0, sp, 8
+; RV32IF-NEXT:    call __fixdfti
+; RV32IF-NEXT:    lw a3, 8(sp)
+; RV32IF-NEXT:    lw a1, 12(sp)
+; RV32IF-NEXT:    lw a2, 16(sp)
+; RV32IF-NEXT:    lw a4, 20(sp)
+; RV32IF-NEXT:    lui a0, 524288
+; RV32IF-NEXT:    addi a5, a0, -1
+; RV32IF-NEXT:    beq a1, a5, .LBB45_2
+; RV32IF-NEXT:  # %bb.1: # %entry
+; RV32IF-NEXT:    sltu a6, a1, a5
+; RV32IF-NEXT:    or a7, a2, a4
+; RV32IF-NEXT:    bnez a7, .LBB45_3
+; RV32IF-NEXT:    j .LBB45_4
+; RV32IF-NEXT:  .LBB45_2:
+; RV32IF-NEXT:    sltiu a6, a3, -1
+; RV32IF-NEXT:    or a7, a2, a4
+; RV32IF-NEXT:    beqz a7, .LBB45_4
+; RV32IF-NEXT:  .LBB45_3: # %entry
+; RV32IF-NEXT:    srli a6, a4, 31
+; RV32IF-NEXT:  .LBB45_4: # %entry
+; RV32IF-NEXT:    neg a7, a6
+; RV32IF-NEXT:    addi t0, a6, -1
+; RV32IF-NEXT:    bnez a6, .LBB45_6
+; RV32IF-NEXT:  # %bb.5: # %entry
+; RV32IF-NEXT:    mv a1, a5
+; RV32IF-NEXT:  .LBB45_6: # %entry
+; RV32IF-NEXT:    or a3, t0, a3
+; RV32IF-NEXT:    and a4, a7, a4
+; RV32IF-NEXT:    and a2, a7, a2
+; RV32IF-NEXT:    beq a1, a0, .LBB45_8
+; RV32IF-NEXT:  # %bb.7: # %entry
+; RV32IF-NEXT:    sltu a0, a0, a1
+; RV32IF-NEXT:    j .LBB45_9
+; RV32IF-NEXT:  .LBB45_8:
+; RV32IF-NEXT:    snez a0, a3
+; RV32IF-NEXT:  .LBB45_9: # %entry
+; RV32IF-NEXT:    and a2, a2, a4
+; RV32IF-NEXT:    li a5, -1
+; RV32IF-NEXT:    beq a2, a5, .LBB45_11
+; RV32IF-NEXT:  # %bb.10: # %entry
+; RV32IF-NEXT:    srli a4, a4, 31
+; RV32IF-NEXT:    xori a0, a4, 1
+; RV32IF-NEXT:  .LBB45_11: # %entry
+; RV32IF-NEXT:    bnez a0, .LBB45_13
+; RV32IF-NEXT:  # %bb.12: # %entry
 ; RV32IF-NEXT:    lui a1, 524288
-; RV32IF-NEXT:  .LBB45_20: # %fp-to-i-cleanup
+; RV32IF-NEXT:  .LBB45_13: # %entry
 ; RV32IF-NEXT:    neg a0, a0
-; RV32IF-NEXT:    and a0, a0, a4
-; RV32IF-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32IF-NEXT:    and a0, a0, a3
+; RV32IF-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IF-NEXT:    .cfi_restore ra
-; RV32IF-NEXT:    .cfi_restore s0
-; RV32IF-NEXT:    .cfi_restore s1
-; RV32IF-NEXT:    .cfi_restore s2
-; RV32IF-NEXT:    .cfi_restore s3
-; RV32IF-NEXT:    .cfi_restore s4
-; RV32IF-NEXT:    .cfi_restore s5
-; RV32IF-NEXT:    .cfi_restore s6
-; RV32IF-NEXT:    .cfi_restore s7
-; RV32IF-NEXT:    .cfi_restore s8
-; RV32IF-NEXT:    .cfi_restore s9
-; RV32IF-NEXT:    .cfi_restore s10
-; RV32IF-NEXT:    .cfi_restore s11
-; RV32IF-NEXT:    addi sp, sp, 128
+; RV32IF-NEXT:    addi sp, sp, 32
 ; RV32IF-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IF-NEXT:    ret
 ;
@@ -5671,327 +3120,64 @@ define i64 @stest_f64i64_mm(double %x) {
 ; RV64IF-NEXT:    ret
 ;
 ; RV32IFD-LABEL: stest_f64i64_mm:
-; RV32IFD:       # %bb.0: # %entryfp-to-i-entry
-; RV32IFD-NEXT:    addi sp, sp, -144
-; RV32IFD-NEXT:    .cfi_def_cfa_offset 144
-; RV32IFD-NEXT:    sw ra, 140(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s0, 136(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s1, 132(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s2, 128(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s3, 124(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s4, 120(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s5, 116(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s6, 112(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s7, 108(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s8, 104(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s9, 100(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s10, 96(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s11, 92(sp) # 4-byte Folded Spill
+; RV32IFD:       # %bb.0: # %entry
+; RV32IFD-NEXT:    addi sp, sp, -32
+; RV32IFD-NEXT:    .cfi_def_cfa_offset 32
+; RV32IFD-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IFD-NEXT:    .cfi_offset ra, -4
-; RV32IFD-NEXT:    .cfi_offset s0, -8
-; RV32IFD-NEXT:    .cfi_offset s1, -12
-; RV32IFD-NEXT:    .cfi_offset s2, -16
-; RV32IFD-NEXT:    .cfi_offset s3, -20
-; RV32IFD-NEXT:    .cfi_offset s4, -24
-; RV32IFD-NEXT:    .cfi_offset s5, -28
-; RV32IFD-NEXT:    .cfi_offset s6, -32
-; RV32IFD-NEXT:    .cfi_offset s7, -36
-; RV32IFD-NEXT:    .cfi_offset s8, -40
-; RV32IFD-NEXT:    .cfi_offset s9, -44
-; RV32IFD-NEXT:    .cfi_offset s10, -48
-; RV32IFD-NEXT:    .cfi_offset s11, -52
-; RV32IFD-NEXT:    fsd fa0, 16(sp)
-; RV32IFD-NEXT:    lw a2, 20(sp)
-; RV32IFD-NEXT:    slli a0, a2, 1
-; RV32IFD-NEXT:    srli a0, a0, 21
-; RV32IFD-NEXT:    li a1, 1023
-; RV32IFD-NEXT:    bgeu a0, a1, .LBB45_2
-; RV32IFD-NEXT:  # %bb.1:
-; RV32IFD-NEXT:    li s2, 0
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    li a0, 0
-; RV32IFD-NEXT:    li a2, 0
-; RV32IFD-NEXT:    j .LBB45_7
-; RV32IFD-NEXT:  .LBB45_2: # %fp-to-i-if-end
-; RV32IFD-NEXT:    addi a1, a0, -1151
-; RV32IFD-NEXT:    sltu a3, a1, a0
-; RV32IFD-NEXT:    sltiu a1, a1, -128
-; RV32IFD-NEXT:    or a1, a3, a1
-; RV32IFD-NEXT:    srli a3, a2, 31
-; RV32IFD-NEXT:    beqz a1, .LBB45_4
-; RV32IFD-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IFD-NEXT:    xori a0, a3, 1
-; RV32IFD-NEXT:    lui a2, 524288
-; RV32IFD-NEXT:    neg s2, a0
-; RV32IFD-NEXT:    sub a2, a2, a0
-; RV32IFD-NEXT:    mv a1, s2
-; RV32IFD-NEXT:    mv a0, s2
-; RV32IFD-NEXT:    j .LBB45_7
-; RV32IFD-NEXT:  .LBB45_4: # %fp-to-i-if-end9
-; RV32IFD-NEXT:    lw a1, 16(sp)
-; RV32IFD-NEXT:    neg s0, a3
-; RV32IFD-NEXT:    slli a2, a2, 12
-; RV32IFD-NEXT:    lui a3, 256
-; RV32IFD-NEXT:    srli a2, a2, 12
-; RV32IFD-NEXT:    or a2, a2, a3
-; RV32IFD-NEXT:    li a3, 1074
-; RV32IFD-NEXT:    ori s8, s0, 1
-; RV32IFD-NEXT:    bltu a3, a0, .LBB45_6
-; RV32IFD-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IFD-NEXT:    sw zero, 40(sp)
-; RV32IFD-NEXT:    sw zero, 44(sp)
-; RV32IFD-NEXT:    sw zero, 48(sp)
-; RV32IFD-NEXT:    sw zero, 52(sp)
-; RV32IFD-NEXT:    sw a1, 24(sp)
-; RV32IFD-NEXT:    sw a2, 28(sp)
-; RV32IFD-NEXT:    sw zero, 32(sp)
-; RV32IFD-NEXT:    sw zero, 36(sp)
-; RV32IFD-NEXT:    li a1, 1075
-; RV32IFD-NEXT:    addi a2, sp, 24
-; RV32IFD-NEXT:    sub a1, a1, a0
-; RV32IFD-NEXT:    srli a0, a1, 3
-; RV32IFD-NEXT:    andi a0, a0, 12
-; RV32IFD-NEXT:    add a0, a2, a0
-; RV32IFD-NEXT:    lw a2, 4(a0)
-; RV32IFD-NEXT:    lw a3, 8(a0)
-; RV32IFD-NEXT:    lw a4, 12(a0)
-; RV32IFD-NEXT:    lw a0, 0(a0)
-; RV32IFD-NEXT:    andi a5, a1, 31
-; RV32IFD-NEXT:    xori a5, a5, 31
-; RV32IFD-NEXT:    slli a6, a4, 1
-; RV32IFD-NEXT:    slli a7, a3, 1
-; RV32IFD-NEXT:    slli t0, a2, 1
-; RV32IFD-NEXT:    sll a6, a6, a5
-; RV32IFD-NEXT:    sll a7, a7, a5
-; RV32IFD-NEXT:    sll a5, t0, a5
-; RV32IFD-NEXT:    srl a3, a3, a1
-; RV32IFD-NEXT:    srl a2, a2, a1
-; RV32IFD-NEXT:    srl a0, a0, a1
-; RV32IFD-NEXT:    or a3, a3, a6
-; RV32IFD-NEXT:    sw a3, 12(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    or s5, a2, a7
-; RV32IFD-NEXT:    or s6, a0, a5
-; RV32IFD-NEXT:    srl s4, a4, a1
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s7, a1
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s7, a0, s7
-; RV32IFD-NEXT:    sltu a0, s7, a0
-; RV32IFD-NEXT:    add s9, a1, a0
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s10, a0, s7
-; RV32IFD-NEXT:    sltu a0, s10, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s11, s9, a0
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s1, a0
-; RV32IFD-NEXT:    mv s3, s8
-; RV32IFD-NEXT:    mv s8, a1
-; RV32IFD-NEXT:    add s7, a0, s11
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s6
-; RV32IFD-NEXT:    mv a3, s5
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    lw a2, 12(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    mv a3, s4
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv a2, a1
-; RV32IFD-NEXT:    mv a1, s10
-; RV32IFD-NEXT:    add a3, s5, a0
-; RV32IFD-NEXT:    sltu a4, s7, s1
-; RV32IFD-NEXT:    sltu a5, s11, s9
-; RV32IFD-NEXT:    add a2, s6, a2
-; RV32IFD-NEXT:    add a0, s7, a3
-; RV32IFD-NEXT:    add a5, s8, a5
-; RV32IFD-NEXT:    sltu a3, a3, s5
-; RV32IFD-NEXT:    sltu a6, a0, s7
-; RV32IFD-NEXT:    add a4, a5, a4
-; RV32IFD-NEXT:    add a2, a2, a3
-; RV32IFD-NEXT:    add a2, a4, a2
-; RV32IFD-NEXT:    add a2, a2, a6
-; RV32IFD-NEXT:    j .LBB45_7
-; RV32IFD-NEXT:  .LBB45_6: # %fp-to-i-if-else
-; RV32IFD-NEXT:    sw a1, 72(sp)
-; RV32IFD-NEXT:    sw a2, 76(sp)
-; RV32IFD-NEXT:    sw zero, 80(sp)
-; RV32IFD-NEXT:    sw zero, 84(sp)
-; RV32IFD-NEXT:    sw zero, 56(sp)
-; RV32IFD-NEXT:    sw zero, 60(sp)
-; RV32IFD-NEXT:    sw zero, 64(sp)
-; RV32IFD-NEXT:    sw zero, 68(sp)
-; RV32IFD-NEXT:    addi a0, a0, -1075
-; RV32IFD-NEXT:    addi a1, sp, 72
-; RV32IFD-NEXT:    srli a2, a0, 3
-; RV32IFD-NEXT:    andi a3, a0, 31
-; RV32IFD-NEXT:    andi a2, a2, 12
-; RV32IFD-NEXT:    xori a3, a3, 31
-; RV32IFD-NEXT:    sub a1, a1, a2
-; RV32IFD-NEXT:    lw a4, 0(a1)
-; RV32IFD-NEXT:    lw a2, 4(a1)
-; RV32IFD-NEXT:    lw a5, 8(a1)
-; RV32IFD-NEXT:    lw a1, 12(a1)
-; RV32IFD-NEXT:    srli a6, a4, 1
-; RV32IFD-NEXT:    srli a7, a2, 1
-; RV32IFD-NEXT:    srli t0, a5, 1
-; RV32IFD-NEXT:    srl a6, a6, a3
-; RV32IFD-NEXT:    srl a7, a7, a3
-; RV32IFD-NEXT:    srl a3, t0, a3
-; RV32IFD-NEXT:    sll a2, a2, a0
-; RV32IFD-NEXT:    sll a5, a5, a0
-; RV32IFD-NEXT:    sll a1, a1, a0
-; RV32IFD-NEXT:    or s3, a2, a6
-; RV32IFD-NEXT:    or a2, a5, a7
-; RV32IFD-NEXT:    or a3, a1, a3
-; RV32IFD-NEXT:    sll s4, a4, a0
-; RV32IFD-NEXT:    mv a0, s8
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s5, a1
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s4
-; RV32IFD-NEXT:    mv a3, s3
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a1, a1, s5
-; RV32IFD-NEXT:    add s1, a0, s2
-; RV32IFD-NEXT:    sltu a0, s1, a0
-; RV32IFD-NEXT:    add s7, a1, a0
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    add s8, s5, a1
-; RV32IFD-NEXT:    sltu a0, s8, s5
-; RV32IFD-NEXT:    add s6, s6, a0
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s8, a0, s8
-; RV32IFD-NEXT:    sltu a0, s8, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s4, s6, a0
-; RV32IFD-NEXT:    sltu s5, s4, s6
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv a2, a1
-; RV32IFD-NEXT:    mv a1, s8
-; RV32IFD-NEXT:    add a2, a2, s5
-; RV32IFD-NEXT:    add s4, a0, s4
-; RV32IFD-NEXT:    sltu a3, s4, a0
-; RV32IFD-NEXT:    add a0, s4, s1
-; RV32IFD-NEXT:    add a2, a2, a3
-; RV32IFD-NEXT:    add a2, a2, s7
-; RV32IFD-NEXT:    sltu a3, a0, s4
-; RV32IFD-NEXT:    add a2, a2, a3
-; RV32IFD-NEXT:  .LBB45_7: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    lui a3, 524288
-; RV32IFD-NEXT:    addi a4, a3, -1
-; RV32IFD-NEXT:    beq a1, a4, .LBB45_9
-; RV32IFD-NEXT:  # %bb.8: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    sltu a5, a1, a4
-; RV32IFD-NEXT:    or a6, a0, a2
-; RV32IFD-NEXT:    bnez a6, .LBB45_10
-; RV32IFD-NEXT:    j .LBB45_11
-; RV32IFD-NEXT:  .LBB45_9:
-; RV32IFD-NEXT:    sltiu a5, s2, -1
-; RV32IFD-NEXT:    or a6, a0, a2
-; RV32IFD-NEXT:    beqz a6, .LBB45_11
-; RV32IFD-NEXT:  .LBB45_10: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    srli a5, a2, 31
-; RV32IFD-NEXT:  .LBB45_11: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    neg a6, a5
-; RV32IFD-NEXT:    addi a7, a5, -1
-; RV32IFD-NEXT:    bnez a5, .LBB45_13
-; RV32IFD-NEXT:  # %bb.12: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    mv a1, a4
-; RV32IFD-NEXT:  .LBB45_13: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    or a4, a7, s2
-; RV32IFD-NEXT:    and a2, a6, a2
-; RV32IFD-NEXT:    and a5, a6, a0
-; RV32IFD-NEXT:    beq a1, a3, .LBB45_15
-; RV32IFD-NEXT:  # %bb.14: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    sltu a0, a3, a1
-; RV32IFD-NEXT:    j .LBB45_16
-; RV32IFD-NEXT:  .LBB45_15:
-; RV32IFD-NEXT:    snez a0, a4
-; RV32IFD-NEXT:  .LBB45_16: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    and a5, a5, a2
-; RV32IFD-NEXT:    li a3, -1
-; RV32IFD-NEXT:    beq a5, a3, .LBB45_18
-; RV32IFD-NEXT:  # %bb.17: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    srli a2, a2, 31
-; RV32IFD-NEXT:    xori a0, a2, 1
-; RV32IFD-NEXT:  .LBB45_18: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    bnez a0, .LBB45_20
-; RV32IFD-NEXT:  # %bb.19: # %fp-to-i-cleanup
+; RV32IFD-NEXT:    addi a0, sp, 8
+; RV32IFD-NEXT:    call __fixdfti
+; RV32IFD-NEXT:    lw a3, 8(sp)
+; RV32IFD-NEXT:    lw a1, 12(sp)
+; RV32IFD-NEXT:    lw a2, 16(sp)
+; RV32IFD-NEXT:    lw a4, 20(sp)
+; RV32IFD-NEXT:    lui a0, 524288
+; RV32IFD-NEXT:    addi a5, a0, -1
+; RV32IFD-NEXT:    beq a1, a5, .LBB45_2
+; RV32IFD-NEXT:  # %bb.1: # %entry
+; RV32IFD-NEXT:    sltu a6, a1, a5
+; RV32IFD-NEXT:    or a7, a2, a4
+; RV32IFD-NEXT:    bnez a7, .LBB45_3
+; RV32IFD-NEXT:    j .LBB45_4
+; RV32IFD-NEXT:  .LBB45_2:
+; RV32IFD-NEXT:    sltiu a6, a3, -1
+; RV32IFD-NEXT:    or a7, a2, a4
+; RV32IFD-NEXT:    beqz a7, .LBB45_4
+; RV32IFD-NEXT:  .LBB45_3: # %entry
+; RV32IFD-NEXT:    srli a6, a4, 31
+; RV32IFD-NEXT:  .LBB45_4: # %entry
+; RV32IFD-NEXT:    neg a7, a6
+; RV32IFD-NEXT:    addi t0, a6, -1
+; RV32IFD-NEXT:    bnez a6, .LBB45_6
+; RV32IFD-NEXT:  # %bb.5: # %entry
+; RV32IFD-NEXT:    mv a1, a5
+; RV32IFD-NEXT:  .LBB45_6: # %entry
+; RV32IFD-NEXT:    or a3, t0, a3
+; RV32IFD-NEXT:    and a4, a7, a4
+; RV32IFD-NEXT:    and a2, a7, a2
+; RV32IFD-NEXT:    beq a1, a0, .LBB45_8
+; RV32IFD-NEXT:  # %bb.7: # %entry
+; RV32IFD-NEXT:    sltu a0, a0, a1
+; RV32IFD-NEXT:    j .LBB45_9
+; RV32IFD-NEXT:  .LBB45_8:
+; RV32IFD-NEXT:    snez a0, a3
+; RV32IFD-NEXT:  .LBB45_9: # %entry
+; RV32IFD-NEXT:    and a2, a2, a4
+; RV32IFD-NEXT:    li a5, -1
+; RV32IFD-NEXT:    beq a2, a5, .LBB45_11
+; RV32IFD-NEXT:  # %bb.10: # %entry
+; RV32IFD-NEXT:    srli a4, a4, 31
+; RV32IFD-NEXT:    xori a0, a4, 1
+; RV32IFD-NEXT:  .LBB45_11: # %entry
+; RV32IFD-NEXT:    bnez a0, .LBB45_13
+; RV32IFD-NEXT:  # %bb.12: # %entry
 ; RV32IFD-NEXT:    lui a1, 524288
-; RV32IFD-NEXT:  .LBB45_20: # %fp-to-i-cleanup
+; RV32IFD-NEXT:  .LBB45_13: # %entry
 ; RV32IFD-NEXT:    neg a0, a0
-; RV32IFD-NEXT:    and a0, a0, a4
-; RV32IFD-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s1, 132(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s2, 128(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s3, 124(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s4, 120(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s5, 116(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s6, 112(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s7, 108(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s8, 104(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s9, 100(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s10, 96(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s11, 92(sp) # 4-byte Folded Reload
+; RV32IFD-NEXT:    and a0, a0, a3
+; RV32IFD-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IFD-NEXT:    .cfi_restore ra
-; RV32IFD-NEXT:    .cfi_restore s0
-; RV32IFD-NEXT:    .cfi_restore s1
-; RV32IFD-NEXT:    .cfi_restore s2
-; RV32IFD-NEXT:    .cfi_restore s3
-; RV32IFD-NEXT:    .cfi_restore s4
-; RV32IFD-NEXT:    .cfi_restore s5
-; RV32IFD-NEXT:    .cfi_restore s6
-; RV32IFD-NEXT:    .cfi_restore s7
-; RV32IFD-NEXT:    .cfi_restore s8
-; RV32IFD-NEXT:    .cfi_restore s9
-; RV32IFD-NEXT:    .cfi_restore s10
-; RV32IFD-NEXT:    .cfi_restore s11
-; RV32IFD-NEXT:    addi sp, sp, 144
+; RV32IFD-NEXT:    addi sp, sp, 32
 ; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IFD-NEXT:    ret
 ;
@@ -6013,286 +3199,32 @@ entry:
 
 define i64 @utest_f64i64_mm(double %x) {
 ; RV32IF-LABEL: utest_f64i64_mm:
-; RV32IF:       # %bb.0: # %entryfp-to-i-entry
-; RV32IF-NEXT:    addi sp, sp, -128
-; RV32IF-NEXT:    .cfi_def_cfa_offset 128
-; RV32IF-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32IF:       # %bb.0: # %entry
+; RV32IF-NEXT:    addi sp, sp, -32
+; RV32IF-NEXT:    .cfi_def_cfa_offset 32
+; RV32IF-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IF-NEXT:    .cfi_offset ra, -4
-; RV32IF-NEXT:    .cfi_offset s0, -8
-; RV32IF-NEXT:    .cfi_offset s1, -12
-; RV32IF-NEXT:    .cfi_offset s2, -16
-; RV32IF-NEXT:    .cfi_offset s3, -20
-; RV32IF-NEXT:    .cfi_offset s4, -24
-; RV32IF-NEXT:    .cfi_offset s5, -28
-; RV32IF-NEXT:    .cfi_offset s6, -32
-; RV32IF-NEXT:    .cfi_offset s7, -36
-; RV32IF-NEXT:    .cfi_offset s8, -40
-; RV32IF-NEXT:    .cfi_offset s9, -44
-; RV32IF-NEXT:    .cfi_offset s10, -48
-; RV32IF-NEXT:    .cfi_offset s11, -52
-; RV32IF-NEXT:    slli a2, a1, 1
-; RV32IF-NEXT:    srli a2, a2, 21
-; RV32IF-NEXT:    li a3, 1023
-; RV32IF-NEXT:    bgeu a2, a3, .LBB46_2
-; RV32IF-NEXT:  # %bb.1:
-; RV32IF-NEXT:    li s2, 0
-; RV32IF-NEXT:    li s9, 0
-; RV32IF-NEXT:    li a0, 0
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    j .LBB46_7
-; RV32IF-NEXT:  .LBB46_2: # %fp-to-i-if-end
-; RV32IF-NEXT:    addi a3, a2, -1151
-; RV32IF-NEXT:    sltu a4, a3, a2
-; RV32IF-NEXT:    sltiu a3, a3, -128
-; RV32IF-NEXT:    or a4, a4, a3
-; RV32IF-NEXT:    srli a3, a1, 31
-; RV32IF-NEXT:    beqz a4, .LBB46_4
-; RV32IF-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IF-NEXT:    xori a0, a3, 1
-; RV32IF-NEXT:    lui a1, 524288
-; RV32IF-NEXT:    neg s2, a0
-; RV32IF-NEXT:    sub a1, a1, a0
-; RV32IF-NEXT:    mv s9, s2
-; RV32IF-NEXT:    mv a0, s2
-; RV32IF-NEXT:    j .LBB46_7
-; RV32IF-NEXT:  .LBB46_4: # %fp-to-i-if-end9
-; RV32IF-NEXT:    neg s0, a3
-; RV32IF-NEXT:    slli a1, a1, 12
-; RV32IF-NEXT:    lui a3, 256
-; RV32IF-NEXT:    li a4, 1074
-; RV32IF-NEXT:    srli a1, a1, 12
-; RV32IF-NEXT:    or a1, a1, a3
-; RV32IF-NEXT:    ori s8, s0, 1
-; RV32IF-NEXT:    bltu a4, a2, .LBB46_6
-; RV32IF-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IF-NEXT:    sw zero, 24(sp)
-; RV32IF-NEXT:    sw zero, 28(sp)
-; RV32IF-NEXT:    sw zero, 32(sp)
-; RV32IF-NEXT:    sw zero, 36(sp)
-; RV32IF-NEXT:    sw a0, 8(sp)
-; RV32IF-NEXT:    sw a1, 12(sp)
-; RV32IF-NEXT:    sw zero, 16(sp)
-; RV32IF-NEXT:    sw zero, 20(sp)
-; RV32IF-NEXT:    li a0, 1075
-; RV32IF-NEXT:    addi a1, sp, 8
-; RV32IF-NEXT:    sub a0, a0, a2
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a3, 8(a1)
-; RV32IF-NEXT:    lw a4, 12(a1)
-; RV32IF-NEXT:    lw a1, 0(a1)
-; RV32IF-NEXT:    andi a5, a0, 31
-; RV32IF-NEXT:    xori a5, a5, 31
-; RV32IF-NEXT:    slli a6, a4, 1
-; RV32IF-NEXT:    slli a7, a3, 1
-; RV32IF-NEXT:    slli t0, a2, 1
-; RV32IF-NEXT:    sll a6, a6, a5
-; RV32IF-NEXT:    sll a7, a7, a5
-; RV32IF-NEXT:    sll a5, t0, a5
-; RV32IF-NEXT:    srl a3, a3, a0
-; RV32IF-NEXT:    srl a2, a2, a0
-; RV32IF-NEXT:    srl a1, a1, a0
-; RV32IF-NEXT:    or a3, a3, a6
-; RV32IF-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    or s5, a2, a7
-; RV32IF-NEXT:    or s6, a1, a5
-; RV32IF-NEXT:    srl s4, a4, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s7, a1
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s7, a0, s7
-; RV32IF-NEXT:    sltu a0, s7, a0
-; RV32IF-NEXT:    add s10, a1, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s9, a0, s7
-; RV32IF-NEXT:    sltu a0, s9, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s11, s10, a0
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s1, a0
-; RV32IF-NEXT:    mv s3, s8
-; RV32IF-NEXT:    mv s8, a1
-; RV32IF-NEXT:    add s7, a0, s11
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s6
-; RV32IF-NEXT:    mv a3, s5
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    mv a3, s4
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a2, s5, a0
-; RV32IF-NEXT:    sltu a3, s7, s1
-; RV32IF-NEXT:    sltu a4, s11, s10
-; RV32IF-NEXT:    add a1, s6, a1
-; RV32IF-NEXT:    add a0, s7, a2
-; RV32IF-NEXT:    add a4, s8, a4
-; RV32IF-NEXT:    sltu a2, a2, s5
-; RV32IF-NEXT:    sltu a5, a0, s7
-; RV32IF-NEXT:    add a3, a4, a3
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    add a1, a3, a1
-; RV32IF-NEXT:    add a1, a1, a5
-; RV32IF-NEXT:    j .LBB46_7
-; RV32IF-NEXT:  .LBB46_6: # %fp-to-i-if-else
-; RV32IF-NEXT:    sw a0, 56(sp)
-; RV32IF-NEXT:    sw a1, 60(sp)
-; RV32IF-NEXT:    sw zero, 64(sp)
-; RV32IF-NEXT:    sw zero, 68(sp)
-; RV32IF-NEXT:    sw zero, 40(sp)
-; RV32IF-NEXT:    sw zero, 44(sp)
-; RV32IF-NEXT:    sw zero, 48(sp)
-; RV32IF-NEXT:    sw zero, 52(sp)
-; RV32IF-NEXT:    addi a0, a2, -1075
-; RV32IF-NEXT:    addi a1, sp, 56
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a3, a0, 31
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    xori a3, a3, 31
-; RV32IF-NEXT:    sub a1, a1, a2
-; RV32IF-NEXT:    lw a4, 0(a1)
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a5, 8(a1)
-; RV32IF-NEXT:    lw a1, 12(a1)
-; RV32IF-NEXT:    srli a6, a4, 1
-; RV32IF-NEXT:    srli a7, a2, 1
-; RV32IF-NEXT:    srli t0, a5, 1
-; RV32IF-NEXT:    srl a6, a6, a3
-; RV32IF-NEXT:    srl a7, a7, a3
-; RV32IF-NEXT:    srl a3, t0, a3
-; RV32IF-NEXT:    sll a2, a2, a0
-; RV32IF-NEXT:    sll a5, a5, a0
-; RV32IF-NEXT:    sll a1, a1, a0
-; RV32IF-NEXT:    or s3, a2, a6
-; RV32IF-NEXT:    or a2, a5, a7
-; RV32IF-NEXT:    or a3, a1, a3
-; RV32IF-NEXT:    sll s4, a4, a0
-; RV32IF-NEXT:    mv a0, s8
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s5, a1
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s4
-; RV32IF-NEXT:    mv a3, s3
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a1, a1, s5
-; RV32IF-NEXT:    add s1, a0, s2
-; RV32IF-NEXT:    sltu a0, s1, a0
-; RV32IF-NEXT:    add s7, a1, a0
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    add s9, s5, a1
-; RV32IF-NEXT:    sltu a0, s9, s5
-; RV32IF-NEXT:    add s6, s6, a0
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s9, a0, s9
-; RV32IF-NEXT:    sltu a0, s9, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s4, s6, a0
-; RV32IF-NEXT:    sltu s5, s4, s6
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a1, a1, s5
-; RV32IF-NEXT:    add s4, a0, s4
-; RV32IF-NEXT:    sltu a2, s4, a0
-; RV32IF-NEXT:    add a0, s4, s1
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    add a1, a1, s7
-; RV32IF-NEXT:    sltu a2, a0, s4
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:  .LBB46_7: # %fp-to-i-cleanup
-; RV32IF-NEXT:    or a2, a1, a0
+; RV32IF-NEXT:    mv a2, a1
+; RV32IF-NEXT:    mv a1, a0
+; RV32IF-NEXT:    addi a0, sp, 8
+; RV32IF-NEXT:    call __fixunsdfti
+; RV32IF-NEXT:    lw a0, 16(sp)
+; RV32IF-NEXT:    lw a1, 20(sp)
+; RV32IF-NEXT:    lw a2, 12(sp)
+; RV32IF-NEXT:    lw a3, 8(sp)
+; RV32IF-NEXT:    or a4, a1, a0
 ; RV32IF-NEXT:    xori a0, a0, 1
-; RV32IF-NEXT:    seqz a2, a2
+; RV32IF-NEXT:    seqz a4, a4
 ; RV32IF-NEXT:    or a0, a0, a1
 ; RV32IF-NEXT:    seqz a0, a0
 ; RV32IF-NEXT:    addi a0, a0, -1
-; RV32IF-NEXT:    and a0, a0, a2
+; RV32IF-NEXT:    and a0, a0, a4
 ; RV32IF-NEXT:    neg a1, a0
-; RV32IF-NEXT:    and a0, a1, s2
-; RV32IF-NEXT:    and a1, a1, s9
-; RV32IF-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32IF-NEXT:    and a0, a1, a3
+; RV32IF-NEXT:    and a1, a1, a2
+; RV32IF-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IF-NEXT:    .cfi_restore ra
-; RV32IF-NEXT:    .cfi_restore s0
-; RV32IF-NEXT:    .cfi_restore s1
-; RV32IF-NEXT:    .cfi_restore s2
-; RV32IF-NEXT:    .cfi_restore s3
-; RV32IF-NEXT:    .cfi_restore s4
-; RV32IF-NEXT:    .cfi_restore s5
-; RV32IF-NEXT:    .cfi_restore s6
-; RV32IF-NEXT:    .cfi_restore s7
-; RV32IF-NEXT:    .cfi_restore s8
-; RV32IF-NEXT:    .cfi_restore s9
-; RV32IF-NEXT:    .cfi_restore s10
-; RV32IF-NEXT:    .cfi_restore s11
-; RV32IF-NEXT:    addi sp, sp, 128
+; RV32IF-NEXT:    addi sp, sp, 32
 ; RV32IF-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IF-NEXT:    ret
 ;
@@ -6313,289 +3245,30 @@ define i64 @utest_f64i64_mm(double %x) {
 ; RV64-NEXT:    ret
 ;
 ; RV32IFD-LABEL: utest_f64i64_mm:
-; RV32IFD:       # %bb.0: # %entryfp-to-i-entry
-; RV32IFD-NEXT:    addi sp, sp, -144
-; RV32IFD-NEXT:    .cfi_def_cfa_offset 144
-; RV32IFD-NEXT:    sw ra, 140(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s0, 136(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s1, 132(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s2, 128(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s3, 124(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s4, 120(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s5, 116(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s6, 112(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s7, 108(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s8, 104(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s9, 100(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s10, 96(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s11, 92(sp) # 4-byte Folded Spill
+; RV32IFD:       # %bb.0: # %entry
+; RV32IFD-NEXT:    addi sp, sp, -32
+; RV32IFD-NEXT:    .cfi_def_cfa_offset 32
+; RV32IFD-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IFD-NEXT:    .cfi_offset ra, -4
-; RV32IFD-NEXT:    .cfi_offset s0, -8
-; RV32IFD-NEXT:    .cfi_offset s1, -12
-; RV32IFD-NEXT:    .cfi_offset s2, -16
-; RV32IFD-NEXT:    .cfi_offset s3, -20
-; RV32IFD-NEXT:    .cfi_offset s4, -24
-; RV32IFD-NEXT:    .cfi_offset s5, -28
-; RV32IFD-NEXT:    .cfi_offset s6, -32
-; RV32IFD-NEXT:    .cfi_offset s7, -36
-; RV32IFD-NEXT:    .cfi_offset s8, -40
-; RV32IFD-NEXT:    .cfi_offset s9, -44
-; RV32IFD-NEXT:    .cfi_offset s10, -48
-; RV32IFD-NEXT:    .cfi_offset s11, -52
-; RV32IFD-NEXT:    fsd fa0, 16(sp)
-; RV32IFD-NEXT:    lw a2, 20(sp)
-; RV32IFD-NEXT:    slli a0, a2, 1
-; RV32IFD-NEXT:    srli a0, a0, 21
-; RV32IFD-NEXT:    li a1, 1023
-; RV32IFD-NEXT:    bgeu a0, a1, .LBB46_2
-; RV32IFD-NEXT:  # %bb.1:
-; RV32IFD-NEXT:    li s2, 0
-; RV32IFD-NEXT:    li s9, 0
-; RV32IFD-NEXT:    li a0, 0
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    j .LBB46_7
-; RV32IFD-NEXT:  .LBB46_2: # %fp-to-i-if-end
-; RV32IFD-NEXT:    addi a1, a0, -1151
-; RV32IFD-NEXT:    sltu a3, a1, a0
-; RV32IFD-NEXT:    sltiu a1, a1, -128
-; RV32IFD-NEXT:    or a1, a3, a1
-; RV32IFD-NEXT:    srli a3, a2, 31
-; RV32IFD-NEXT:    beqz a1, .LBB46_4
-; RV32IFD-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IFD-NEXT:    xori a0, a3, 1
-; RV32IFD-NEXT:    lui a1, 524288
-; RV32IFD-NEXT:    neg s2, a0
-; RV32IFD-NEXT:    sub a1, a1, a0
-; RV32IFD-NEXT:    mv s9, s2
-; RV32IFD-NEXT:    mv a0, s2
-; RV32IFD-NEXT:    j .LBB46_7
-; RV32IFD-NEXT:  .LBB46_4: # %fp-to-i-if-end9
-; RV32IFD-NEXT:    lw a1, 16(sp)
-; RV32IFD-NEXT:    neg s0, a3
-; RV32IFD-NEXT:    slli a2, a2, 12
-; RV32IFD-NEXT:    lui a3, 256
-; RV32IFD-NEXT:    srli a2, a2, 12
-; RV32IFD-NEXT:    or a2, a2, a3
-; RV32IFD-NEXT:    li a3, 1074
-; RV32IFD-NEXT:    ori s8, s0, 1
-; RV32IFD-NEXT:    bltu a3, a0, .LBB46_6
-; RV32IFD-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IFD-NEXT:    sw zero, 40(sp)
-; RV32IFD-NEXT:    sw zero, 44(sp)
-; RV32IFD-NEXT:    sw zero, 48(sp)
-; RV32IFD-NEXT:    sw zero, 52(sp)
-; RV32IFD-NEXT:    sw a1, 24(sp)
-; RV32IFD-NEXT:    sw a2, 28(sp)
-; RV32IFD-NEXT:    sw zero, 32(sp)
-; RV32IFD-NEXT:    sw zero, 36(sp)
-; RV32IFD-NEXT:    li a1, 1075
-; RV32IFD-NEXT:    addi a2, sp, 24
-; RV32IFD-NEXT:    sub a1, a1, a0
-; RV32IFD-NEXT:    srli a0, a1, 3
-; RV32IFD-NEXT:    andi a0, a0, 12
-; RV32IFD-NEXT:    add a0, a2, a0
-; RV32IFD-NEXT:    lw a2, 4(a0)
-; RV32IFD-NEXT:    lw a3, 8(a0)
-; RV32IFD-NEXT:    lw a4, 12(a0)
-; RV32IFD-NEXT:    lw a0, 0(a0)
-; RV32IFD-NEXT:    andi a5, a1, 31
-; RV32IFD-NEXT:    xori a5, a5, 31
-; RV32IFD-NEXT:    slli a6, a4, 1
-; RV32IFD-NEXT:    slli a7, a3, 1
-; RV32IFD-NEXT:    slli t0, a2, 1
-; RV32IFD-NEXT:    sll a6, a6, a5
-; RV32IFD-NEXT:    sll a7, a7, a5
-; RV32IFD-NEXT:    sll a5, t0, a5
-; RV32IFD-NEXT:    srl a3, a3, a1
-; RV32IFD-NEXT:    srl a2, a2, a1
-; RV32IFD-NEXT:    srl a0, a0, a1
-; RV32IFD-NEXT:    or a3, a3, a6
-; RV32IFD-NEXT:    sw a3, 12(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    or s5, a2, a7
-; RV32IFD-NEXT:    or s6, a0, a5
-; RV32IFD-NEXT:    srl s4, a4, a1
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s7, a1
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s7, a0, s7
-; RV32IFD-NEXT:    sltu a0, s7, a0
-; RV32IFD-NEXT:    add s10, a1, a0
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s9, a0, s7
-; RV32IFD-NEXT:    sltu a0, s9, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s11, s10, a0
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s1, a0
-; RV32IFD-NEXT:    mv s3, s8
-; RV32IFD-NEXT:    mv s8, a1
-; RV32IFD-NEXT:    add s7, a0, s11
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s6
-; RV32IFD-NEXT:    mv a3, s5
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    lw a2, 12(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    mv a3, s4
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a2, s5, a0
-; RV32IFD-NEXT:    sltu a3, s7, s1
-; RV32IFD-NEXT:    sltu a4, s11, s10
-; RV32IFD-NEXT:    add a1, s6, a1
-; RV32IFD-NEXT:    add a0, s7, a2
-; RV32IFD-NEXT:    add a4, s8, a4
-; RV32IFD-NEXT:    sltu a2, a2, s5
-; RV32IFD-NEXT:    sltu a5, a0, s7
-; RV32IFD-NEXT:    add a3, a4, a3
-; RV32IFD-NEXT:    add a1, a1, a2
-; RV32IFD-NEXT:    add a1, a3, a1
-; RV32IFD-NEXT:    add a1, a1, a5
-; RV32IFD-NEXT:    j .LBB46_7
-; RV32IFD-NEXT:  .LBB46_6: # %fp-to-i-if-else
-; RV32IFD-NEXT:    sw a1, 72(sp)
-; RV32IFD-NEXT:    sw a2, 76(sp)
-; RV32IFD-NEXT:    sw zero, 80(sp)
-; RV32IFD-NEXT:    sw zero, 84(sp)
-; RV32IFD-NEXT:    sw zero, 56(sp)
-; RV32IFD-NEXT:    sw zero, 60(sp)
-; RV32IFD-NEXT:    sw zero, 64(sp)
-; RV32IFD-NEXT:    sw zero, 68(sp)
-; RV32IFD-NEXT:    addi a0, a0, -1075
-; RV32IFD-NEXT:    addi a1, sp, 72
-; RV32IFD-NEXT:    srli a2, a0, 3
-; RV32IFD-NEXT:    andi a3, a0, 31
-; RV32IFD-NEXT:    andi a2, a2, 12
-; RV32IFD-NEXT:    xori a3, a3, 31
-; RV32IFD-NEXT:    sub a1, a1, a2
-; RV32IFD-NEXT:    lw a4, 0(a1)
-; RV32IFD-NEXT:    lw a2, 4(a1)
-; RV32IFD-NEXT:    lw a5, 8(a1)
-; RV32IFD-NEXT:    lw a1, 12(a1)
-; RV32IFD-NEXT:    srli a6, a4, 1
-; RV32IFD-NEXT:    srli a7, a2, 1
-; RV32IFD-NEXT:    srli t0, a5, 1
-; RV32IFD-NEXT:    srl a6, a6, a3
-; RV32IFD-NEXT:    srl a7, a7, a3
-; RV32IFD-NEXT:    srl a3, t0, a3
-; RV32IFD-NEXT:    sll a2, a2, a0
-; RV32IFD-NEXT:    sll a5, a5, a0
-; RV32IFD-NEXT:    sll a1, a1, a0
-; RV32IFD-NEXT:    or s3, a2, a6
-; RV32IFD-NEXT:    or a2, a5, a7
-; RV32IFD-NEXT:    or a3, a1, a3
-; RV32IFD-NEXT:    sll s4, a4, a0
-; RV32IFD-NEXT:    mv a0, s8
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s5, a1
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s4
-; RV32IFD-NEXT:    mv a3, s3
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a1, a1, s5
-; RV32IFD-NEXT:    add s1, a0, s2
-; RV32IFD-NEXT:    sltu a0, s1, a0
-; RV32IFD-NEXT:    add s7, a1, a0
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    add s9, s5, a1
-; RV32IFD-NEXT:    sltu a0, s9, s5
-; RV32IFD-NEXT:    add s6, s6, a0
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s9, a0, s9
-; RV32IFD-NEXT:    sltu a0, s9, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s4, s6, a0
-; RV32IFD-NEXT:    sltu s5, s4, s6
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a1, a1, s5
-; RV32IFD-NEXT:    add s4, a0, s4
-; RV32IFD-NEXT:    sltu a2, s4, a0
-; RV32IFD-NEXT:    add a0, s4, s1
-; RV32IFD-NEXT:    add a1, a1, a2
-; RV32IFD-NEXT:    add a1, a1, s7
-; RV32IFD-NEXT:    sltu a2, a0, s4
-; RV32IFD-NEXT:    add a1, a1, a2
-; RV32IFD-NEXT:  .LBB46_7: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    or a2, a1, a0
+; RV32IFD-NEXT:    addi a0, sp, 8
+; RV32IFD-NEXT:    call __fixunsdfti
+; RV32IFD-NEXT:    lw a0, 16(sp)
+; RV32IFD-NEXT:    lw a1, 20(sp)
+; RV32IFD-NEXT:    lw a2, 12(sp)
+; RV32IFD-NEXT:    lw a3, 8(sp)
+; RV32IFD-NEXT:    or a4, a1, a0
 ; RV32IFD-NEXT:    xori a0, a0, 1
-; RV32IFD-NEXT:    seqz a2, a2
+; RV32IFD-NEXT:    seqz a4, a4
 ; RV32IFD-NEXT:    or a0, a0, a1
 ; RV32IFD-NEXT:    seqz a0, a0
 ; RV32IFD-NEXT:    addi a0, a0, -1
-; RV32IFD-NEXT:    and a0, a0, a2
+; RV32IFD-NEXT:    and a0, a0, a4
 ; RV32IFD-NEXT:    neg a1, a0
-; RV32IFD-NEXT:    and a0, a1, s2
-; RV32IFD-NEXT:    and a1, a1, s9
-; RV32IFD-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s1, 132(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s2, 128(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s3, 124(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s4, 120(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s5, 116(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s6, 112(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s7, 108(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s8, 104(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s9, 100(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s10, 96(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s11, 92(sp) # 4-byte Folded Reload
+; RV32IFD-NEXT:    and a0, a1, a3
+; RV32IFD-NEXT:    and a1, a1, a2
+; RV32IFD-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IFD-NEXT:    .cfi_restore ra
-; RV32IFD-NEXT:    .cfi_restore s0
-; RV32IFD-NEXT:    .cfi_restore s1
-; RV32IFD-NEXT:    .cfi_restore s2
-; RV32IFD-NEXT:    .cfi_restore s3
-; RV32IFD-NEXT:    .cfi_restore s4
-; RV32IFD-NEXT:    .cfi_restore s5
-; RV32IFD-NEXT:    .cfi_restore s6
-; RV32IFD-NEXT:    .cfi_restore s7
-; RV32IFD-NEXT:    .cfi_restore s8
-; RV32IFD-NEXT:    .cfi_restore s9
-; RV32IFD-NEXT:    .cfi_restore s10
-; RV32IFD-NEXT:    .cfi_restore s11
-; RV32IFD-NEXT:    addi sp, sp, 144
+; RV32IFD-NEXT:    addi sp, sp, 32
 ; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IFD-NEXT:    ret
 entry:
@@ -6607,296 +3280,42 @@ entry:
 
 define i64 @ustest_f64i64_mm(double %x) {
 ; RV32IF-LABEL: ustest_f64i64_mm:
-; RV32IF:       # %bb.0: # %entryfp-to-i-entry
-; RV32IF-NEXT:    addi sp, sp, -128
-; RV32IF-NEXT:    .cfi_def_cfa_offset 128
-; RV32IF-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32IF:       # %bb.0: # %entry
+; RV32IF-NEXT:    addi sp, sp, -32
+; RV32IF-NEXT:    .cfi_def_cfa_offset 32
+; RV32IF-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IF-NEXT:    .cfi_offset ra, -4
-; RV32IF-NEXT:    .cfi_offset s0, -8
-; RV32IF-NEXT:    .cfi_offset s1, -12
-; RV32IF-NEXT:    .cfi_offset s2, -16
-; RV32IF-NEXT:    .cfi_offset s3, -20
-; RV32IF-NEXT:    .cfi_offset s4, -24
-; RV32IF-NEXT:    .cfi_offset s5, -28
-; RV32IF-NEXT:    .cfi_offset s6, -32
-; RV32IF-NEXT:    .cfi_offset s7, -36
-; RV32IF-NEXT:    .cfi_offset s8, -40
-; RV32IF-NEXT:    .cfi_offset s9, -44
-; RV32IF-NEXT:    .cfi_offset s10, -48
-; RV32IF-NEXT:    .cfi_offset s11, -52
-; RV32IF-NEXT:    slli a2, a1, 1
-; RV32IF-NEXT:    srli a2, a2, 21
-; RV32IF-NEXT:    li a3, 1023
-; RV32IF-NEXT:    bgeu a2, a3, .LBB47_2
-; RV32IF-NEXT:  # %bb.1:
-; RV32IF-NEXT:    li s2, 0
-; RV32IF-NEXT:    li s9, 0
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    li a0, 0
-; RV32IF-NEXT:    j .LBB47_6
-; RV32IF-NEXT:  .LBB47_2: # %fp-to-i-if-end
-; RV32IF-NEXT:    addi a3, a2, -1151
-; RV32IF-NEXT:    sltu a4, a3, a2
-; RV32IF-NEXT:    sltiu a3, a3, -128
-; RV32IF-NEXT:    or a4, a4, a3
-; RV32IF-NEXT:    srli a3, a1, 31
-; RV32IF-NEXT:    beqz a4, .LBB47_4
-; RV32IF-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IF-NEXT:    xori a0, a3, 1
-; RV32IF-NEXT:    lui a1, 524288
-; RV32IF-NEXT:    neg s2, a0
-; RV32IF-NEXT:    sub a0, a1, a0
-; RV32IF-NEXT:    mv s9, s2
-; RV32IF-NEXT:    mv a1, s2
-; RV32IF-NEXT:    beqz a0, .LBB47_6
-; RV32IF-NEXT:    j .LBB47_8
-; RV32IF-NEXT:  .LBB47_4: # %fp-to-i-if-end9
-; RV32IF-NEXT:    neg s0, a3
-; RV32IF-NEXT:    slli a1, a1, 12
-; RV32IF-NEXT:    lui a3, 256
-; RV32IF-NEXT:    li a4, 1074
-; RV32IF-NEXT:    srli a1, a1, 12
-; RV32IF-NEXT:    or a1, a1, a3
-; RV32IF-NEXT:    ori s8, s0, 1
-; RV32IF-NEXT:    bltu a4, a2, .LBB47_7
-; RV32IF-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IF-NEXT:    sw zero, 24(sp)
-; RV32IF-NEXT:    sw zero, 28(sp)
-; RV32IF-NEXT:    sw zero, 32(sp)
-; RV32IF-NEXT:    sw zero, 36(sp)
-; RV32IF-NEXT:    sw a0, 8(sp)
-; RV32IF-NEXT:    sw a1, 12(sp)
-; RV32IF-NEXT:    sw zero, 16(sp)
-; RV32IF-NEXT:    sw zero, 20(sp)
-; RV32IF-NEXT:    li a0, 1075
-; RV32IF-NEXT:    addi a1, sp, 8
-; RV32IF-NEXT:    sub a0, a0, a2
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    add a1, a1, a2
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a3, 8(a1)
-; RV32IF-NEXT:    lw a4, 12(a1)
-; RV32IF-NEXT:    lw a1, 0(a1)
-; RV32IF-NEXT:    andi a5, a0, 31
-; RV32IF-NEXT:    xori a5, a5, 31
-; RV32IF-NEXT:    slli a6, a4, 1
-; RV32IF-NEXT:    slli a7, a3, 1
-; RV32IF-NEXT:    slli t0, a2, 1
-; RV32IF-NEXT:    sll a6, a6, a5
-; RV32IF-NEXT:    sll a7, a7, a5
-; RV32IF-NEXT:    sll a5, t0, a5
-; RV32IF-NEXT:    srl a3, a3, a0
-; RV32IF-NEXT:    srl a2, a2, a0
-; RV32IF-NEXT:    srl a1, a1, a0
-; RV32IF-NEXT:    or a3, a3, a6
-; RV32IF-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32IF-NEXT:    or s5, a2, a7
-; RV32IF-NEXT:    or s6, a1, a5
-; RV32IF-NEXT:    srl s4, a4, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s7, a1
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s7, a0, s7
-; RV32IF-NEXT:    sltu a0, s7, a0
-; RV32IF-NEXT:    add s10, a1, a0
-; RV32IF-NEXT:    mv a0, s6
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s9, a0, s7
-; RV32IF-NEXT:    sltu a0, s9, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s11, s10, a0
-; RV32IF-NEXT:    mv a0, s5
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s1, a0
-; RV32IF-NEXT:    mv s3, s8
-; RV32IF-NEXT:    mv s8, a1
-; RV32IF-NEXT:    add s7, a0, s11
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s6
-; RV32IF-NEXT:    mv a3, s5
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    mv a3, s4
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a0, s5, a0
-; RV32IF-NEXT:    sltu a2, s7, s1
-; RV32IF-NEXT:    sltu a3, s11, s10
-; RV32IF-NEXT:    add s6, s6, a1
-; RV32IF-NEXT:    add a1, s7, a0
-; RV32IF-NEXT:    add a3, s8, a3
-; RV32IF-NEXT:    sltu a0, a0, s5
-; RV32IF-NEXT:    sltu a4, a1, s7
-; RV32IF-NEXT:    add a2, a3, a2
-; RV32IF-NEXT:    add a0, s6, a0
-; RV32IF-NEXT:    add a0, a2, a0
-; RV32IF-NEXT:    add a0, a0, a4
-; RV32IF-NEXT:    bnez a0, .LBB47_8
-; RV32IF-NEXT:  .LBB47_6:
-; RV32IF-NEXT:    seqz a2, a1
-; RV32IF-NEXT:    j .LBB47_9
-; RV32IF-NEXT:  .LBB47_7: # %fp-to-i-if-else
-; RV32IF-NEXT:    sw a0, 56(sp)
-; RV32IF-NEXT:    sw a1, 60(sp)
-; RV32IF-NEXT:    sw zero, 64(sp)
-; RV32IF-NEXT:    sw zero, 68(sp)
-; RV32IF-NEXT:    sw zero, 40(sp)
-; RV32IF-NEXT:    sw zero, 44(sp)
-; RV32IF-NEXT:    sw zero, 48(sp)
-; RV32IF-NEXT:    sw zero, 52(sp)
-; RV32IF-NEXT:    addi a0, a2, -1075
-; RV32IF-NEXT:    addi a1, sp, 56
-; RV32IF-NEXT:    srli a2, a0, 3
-; RV32IF-NEXT:    andi a3, a0, 31
-; RV32IF-NEXT:    andi a2, a2, 12
-; RV32IF-NEXT:    xori a3, a3, 31
-; RV32IF-NEXT:    sub a1, a1, a2
-; RV32IF-NEXT:    lw a4, 0(a1)
-; RV32IF-NEXT:    lw a2, 4(a1)
-; RV32IF-NEXT:    lw a5, 8(a1)
-; RV32IF-NEXT:    lw a1, 12(a1)
-; RV32IF-NEXT:    srli a6, a4, 1
-; RV32IF-NEXT:    srli a7, a2, 1
-; RV32IF-NEXT:    srli t0, a5, 1
-; RV32IF-NEXT:    srl a6, a6, a3
-; RV32IF-NEXT:    srl a7, a7, a3
-; RV32IF-NEXT:    srl a3, t0, a3
-; RV32IF-NEXT:    sll a2, a2, a0
-; RV32IF-NEXT:    sll a5, a5, a0
-; RV32IF-NEXT:    sll a1, a1, a0
-; RV32IF-NEXT:    or s3, a2, a6
-; RV32IF-NEXT:    or a2, a5, a7
-; RV32IF-NEXT:    or a3, a1, a3
-; RV32IF-NEXT:    sll s4, a4, a0
-; RV32IF-NEXT:    mv a0, s8
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    mv s5, a1
-; RV32IF-NEXT:    mv a0, s0
-; RV32IF-NEXT:    mv a1, s0
-; RV32IF-NEXT:    mv a2, s4
-; RV32IF-NEXT:    mv a3, s3
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add a1, a1, s5
-; RV32IF-NEXT:    add s1, a0, s2
-; RV32IF-NEXT:    sltu a0, s1, a0
-; RV32IF-NEXT:    add s7, a1, a0
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s5, a0
-; RV32IF-NEXT:    mv s6, a1
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s8
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    mv s2, a0
-; RV32IF-NEXT:    add s9, s5, a1
-; RV32IF-NEXT:    sltu a0, s9, s5
-; RV32IF-NEXT:    add s6, s6, a0
-; RV32IF-NEXT:    mv a0, s4
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s9, a0, s9
-; RV32IF-NEXT:    sltu a0, s9, a0
-; RV32IF-NEXT:    add a0, a1, a0
-; RV32IF-NEXT:    add s4, s6, a0
-; RV32IF-NEXT:    sltu s5, s4, s6
-; RV32IF-NEXT:    mv a0, s3
-; RV32IF-NEXT:    li a1, 0
-; RV32IF-NEXT:    mv a2, s0
-; RV32IF-NEXT:    li a3, 0
-; RV32IF-NEXT:    call __muldi3
-; RV32IF-NEXT:    add s5, a1, s5
-; RV32IF-NEXT:    add s4, a0, s4
-; RV32IF-NEXT:    sltu a0, s4, a0
-; RV32IF-NEXT:    add a1, s4, s1
-; RV32IF-NEXT:    add a0, s5, a0
-; RV32IF-NEXT:    add a0, a0, s7
-; RV32IF-NEXT:    sltu a2, a1, s4
-; RV32IF-NEXT:    add a0, a0, a2
-; RV32IF-NEXT:    beqz a0, .LBB47_6
-; RV32IF-NEXT:  .LBB47_8: # %fp-to-i-cleanup
-; RV32IF-NEXT:    srli a2, a0, 31
-; RV32IF-NEXT:  .LBB47_9: # %fp-to-i-cleanup
-; RV32IF-NEXT:    xori a1, a1, 1
-; RV32IF-NEXT:    or a1, a1, a0
-; RV32IF-NEXT:    seqz a1, a1
-; RV32IF-NEXT:    addi a1, a1, -1
-; RV32IF-NEXT:    and a1, a1, a2
-; RV32IF-NEXT:    neg a1, a1
-; RV32IF-NEXT:    and a2, a1, s9
-; RV32IF-NEXT:    and a3, a1, s2
-; RV32IF-NEXT:    and a0, a1, a0
-; RV32IF-NEXT:    srli a0, a0, 31
-; RV32IF-NEXT:    addi a1, a0, -1
-; RV32IF-NEXT:    and a0, a1, a3
-; RV32IF-NEXT:    and a1, a1, a2
-; RV32IF-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32IF-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32IF-NEXT:    mv a2, a1
+; RV32IF-NEXT:    mv a1, a0
+; RV32IF-NEXT:    addi a0, sp, 8
+; RV32IF-NEXT:    call __fixdfti
+; RV32IF-NEXT:    lw a0, 8(sp)
+; RV32IF-NEXT:    lw a1, 12(sp)
+; RV32IF-NEXT:    lw a2, 20(sp)
+; RV32IF-NEXT:    lw a3, 16(sp)
+; RV32IF-NEXT:    beqz a2, .LBB47_2
+; RV32IF-NEXT:  # %bb.1: # %entry
+; RV32IF-NEXT:    srli a4, a2, 31
+; RV32IF-NEXT:    j .LBB47_3
+; RV32IF-NEXT:  .LBB47_2:
+; RV32IF-NEXT:    seqz a4, a3
+; RV32IF-NEXT:  .LBB47_3: # %entry
+; RV32IF-NEXT:    xori a3, a3, 1
+; RV32IF-NEXT:    or a3, a3, a2
+; RV32IF-NEXT:    seqz a3, a3
+; RV32IF-NEXT:    addi a3, a3, -1
+; RV32IF-NEXT:    and a3, a3, a4
+; RV32IF-NEXT:    neg a3, a3
+; RV32IF-NEXT:    and a1, a3, a1
+; RV32IF-NEXT:    and a0, a3, a0
+; RV32IF-NEXT:    and a2, a3, a2
+; RV32IF-NEXT:    srli a2, a2, 31
+; RV32IF-NEXT:    addi a2, a2, -1
+; RV32IF-NEXT:    and a0, a2, a0
+; RV32IF-NEXT:    and a1, a2, a1
+; RV32IF-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IF-NEXT:    .cfi_restore ra
-; RV32IF-NEXT:    .cfi_restore s0
-; RV32IF-NEXT:    .cfi_restore s1
-; RV32IF-NEXT:    .cfi_restore s2
-; RV32IF-NEXT:    .cfi_restore s3
-; RV32IF-NEXT:    .cfi_restore s4
-; RV32IF-NEXT:    .cfi_restore s5
-; RV32IF-NEXT:    .cfi_restore s6
-; RV32IF-NEXT:    .cfi_restore s7
-; RV32IF-NEXT:    .cfi_restore s8
-; RV32IF-NEXT:    .cfi_restore s9
-; RV32IF-NEXT:    .cfi_restore s10
-; RV32IF-NEXT:    .cfi_restore s11
-; RV32IF-NEXT:    addi sp, sp, 128
+; RV32IF-NEXT:    addi sp, sp, 32
 ; RV32IF-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IF-NEXT:    ret
 ;
@@ -6925,299 +3344,40 @@ define i64 @ustest_f64i64_mm(double %x) {
 ; RV64-NEXT:    ret
 ;
 ; RV32IFD-LABEL: ustest_f64i64_mm:
-; RV32IFD:       # %bb.0: # %entryfp-to-i-entry
-; RV32IFD-NEXT:    addi sp, sp, -144
-; RV32IFD-NEXT:    .cfi_def_cfa_offset 144
-; RV32IFD-NEXT:    sw ra, 140(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s0, 136(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s1, 132(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s2, 128(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s3, 124(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s4, 120(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s5, 116(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s6, 112(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s7, 108(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s8, 104(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s9, 100(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s10, 96(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    sw s11, 92(sp) # 4-byte Folded Spill
+; RV32IFD:       # %bb.0: # %entry
+; RV32IFD-NEXT:    addi sp, sp, -32
+; RV32IFD-NEXT:    .cfi_def_cfa_offset 32
+; RV32IFD-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32IFD-NEXT:    .cfi_offset ra, -4
-; RV32IFD-NEXT:    .cfi_offset s0, -8
-; RV32IFD-NEXT:    .cfi_offset s1, -12
-; RV32IFD-NEXT:    .cfi_offset s2, -16
-; RV32IFD-NEXT:    .cfi_offset s3, -20
-; RV32IFD-NEXT:    .cfi_offset s4, -24
-; RV32IFD-NEXT:    .cfi_offset s5, -28
-; RV32IFD-NEXT:    .cfi_offset s6, -32
-; RV32IFD-NEXT:    .cfi_offset s7, -36
-; RV32IFD-NEXT:    .cfi_offset s8, -40
-; RV32IFD-NEXT:    .cfi_offset s9, -44
-; RV32IFD-NEXT:    .cfi_offset s10, -48
-; RV32IFD-NEXT:    .cfi_offset s11, -52
-; RV32IFD-NEXT:    fsd fa0, 16(sp)
+; RV32IFD-NEXT:    addi a0, sp, 8
+; RV32IFD-NEXT:    call __fixdfti
+; RV32IFD-NEXT:    lw a0, 8(sp)
+; RV32IFD-NEXT:    lw a1, 12(sp)
 ; RV32IFD-NEXT:    lw a2, 20(sp)
-; RV32IFD-NEXT:    slli a0, a2, 1
-; RV32IFD-NEXT:    srli a0, a0, 21
-; RV32IFD-NEXT:    li a1, 1023
-; RV32IFD-NEXT:    bgeu a0, a1, .LBB47_2
-; RV32IFD-NEXT:  # %bb.1:
-; RV32IFD-NEXT:    li s2, 0
-; RV32IFD-NEXT:    li s9, 0
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    li a0, 0
-; RV32IFD-NEXT:    j .LBB47_6
-; RV32IFD-NEXT:  .LBB47_2: # %fp-to-i-if-end
-; RV32IFD-NEXT:    addi a1, a0, -1151
-; RV32IFD-NEXT:    sltu a3, a1, a0
-; RV32IFD-NEXT:    sltiu a1, a1, -128
-; RV32IFD-NEXT:    or a1, a3, a1
-; RV32IFD-NEXT:    srli a3, a2, 31
-; RV32IFD-NEXT:    beqz a1, .LBB47_4
-; RV32IFD-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32IFD-NEXT:    xori a0, a3, 1
-; RV32IFD-NEXT:    lui a1, 524288
-; RV32IFD-NEXT:    neg s2, a0
-; RV32IFD-NEXT:    sub a0, a1, a0
-; RV32IFD-NEXT:    mv s9, s2
-; RV32IFD-NEXT:    mv a1, s2
-; RV32IFD-NEXT:    beqz a0, .LBB47_6
-; RV32IFD-NEXT:    j .LBB47_8
-; RV32IFD-NEXT:  .LBB47_4: # %fp-to-i-if-end9
-; RV32IFD-NEXT:    lw a1, 16(sp)
-; RV32IFD-NEXT:    neg s0, a3
-; RV32IFD-NEXT:    slli a2, a2, 12
-; RV32IFD-NEXT:    lui a3, 256
-; RV32IFD-NEXT:    srli a2, a2, 12
-; RV32IFD-NEXT:    or a2, a2, a3
-; RV32IFD-NEXT:    li a3, 1074
-; RV32IFD-NEXT:    ori s8, s0, 1
-; RV32IFD-NEXT:    bltu a3, a0, .LBB47_7
-; RV32IFD-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32IFD-NEXT:    sw zero, 40(sp)
-; RV32IFD-NEXT:    sw zero, 44(sp)
-; RV32IFD-NEXT:    sw zero, 48(sp)
-; RV32IFD-NEXT:    sw zero, 52(sp)
-; RV32IFD-NEXT:    sw a1, 24(sp)
-; RV32IFD-NEXT:    sw a2, 28(sp)
-; RV32IFD-NEXT:    sw zero, 32(sp)
-; RV32IFD-NEXT:    sw zero, 36(sp)
-; RV32IFD-NEXT:    li a1, 1075
-; RV32IFD-NEXT:    addi a2, sp, 24
-; RV32IFD-NEXT:    sub a1, a1, a0
-; RV32IFD-NEXT:    srli a0, a1, 3
-; RV32IFD-NEXT:    andi a0, a0, 12
-; RV32IFD-NEXT:    add a0, a2, a0
-; RV32IFD-NEXT:    lw a2, 4(a0)
-; RV32IFD-NEXT:    lw a3, 8(a0)
-; RV32IFD-NEXT:    lw a4, 12(a0)
-; RV32IFD-NEXT:    lw a0, 0(a0)
-; RV32IFD-NEXT:    andi a5, a1, 31
-; RV32IFD-NEXT:    xori a5, a5, 31
-; RV32IFD-NEXT:    slli a6, a4, 1
-; RV32IFD-NEXT:    slli a7, a3, 1
-; RV32IFD-NEXT:    slli t0, a2, 1
-; RV32IFD-NEXT:    sll a6, a6, a5
-; RV32IFD-NEXT:    sll a7, a7, a5
-; RV32IFD-NEXT:    sll a5, t0, a5
-; RV32IFD-NEXT:    srl a3, a3, a1
-; RV32IFD-NEXT:    srl a2, a2, a1
-; RV32IFD-NEXT:    srl a0, a0, a1
-; RV32IFD-NEXT:    or a3, a3, a6
-; RV32IFD-NEXT:    sw a3, 12(sp) # 4-byte Folded Spill
-; RV32IFD-NEXT:    or s5, a2, a7
-; RV32IFD-NEXT:    or s6, a0, a5
-; RV32IFD-NEXT:    srl s4, a4, a1
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s7, a1
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s7, a0, s7
-; RV32IFD-NEXT:    sltu a0, s7, a0
-; RV32IFD-NEXT:    add s10, a1, a0
-; RV32IFD-NEXT:    mv a0, s6
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s9, a0, s7
-; RV32IFD-NEXT:    sltu a0, s9, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s11, s10, a0
-; RV32IFD-NEXT:    mv a0, s5
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s1, a0
-; RV32IFD-NEXT:    mv s3, s8
-; RV32IFD-NEXT:    mv s8, a1
-; RV32IFD-NEXT:    add s7, a0, s11
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s6
-; RV32IFD-NEXT:    mv a3, s5
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    lw a2, 12(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    mv a3, s4
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a0, s5, a0
-; RV32IFD-NEXT:    sltu a2, s7, s1
-; RV32IFD-NEXT:    sltu a3, s11, s10
-; RV32IFD-NEXT:    add s6, s6, a1
-; RV32IFD-NEXT:    add a1, s7, a0
-; RV32IFD-NEXT:    add a3, s8, a3
-; RV32IFD-NEXT:    sltu a0, a0, s5
-; RV32IFD-NEXT:    sltu a4, a1, s7
-; RV32IFD-NEXT:    add a2, a3, a2
-; RV32IFD-NEXT:    add a0, s6, a0
-; RV32IFD-NEXT:    add a0, a2, a0
-; RV32IFD-NEXT:    add a0, a0, a4
-; RV32IFD-NEXT:    bnez a0, .LBB47_8
-; RV32IFD-NEXT:  .LBB47_6:
-; RV32IFD-NEXT:    seqz a2, a1
-; RV32IFD-NEXT:    j .LBB47_9
-; RV32IFD-NEXT:  .LBB47_7: # %fp-to-i-if-else
-; RV32IFD-NEXT:    sw a1, 72(sp)
-; RV32IFD-NEXT:    sw a2, 76(sp)
-; RV32IFD-NEXT:    sw zero, 80(sp)
-; RV32IFD-NEXT:    sw zero, 84(sp)
-; RV32IFD-NEXT:    sw zero, 56(sp)
-; RV32IFD-NEXT:    sw zero, 60(sp)
-; RV32IFD-NEXT:    sw zero, 64(sp)
-; RV32IFD-NEXT:    sw zero, 68(sp)
-; RV32IFD-NEXT:    addi a0, a0, -1075
-; RV32IFD-NEXT:    addi a1, sp, 72
-; RV32IFD-NEXT:    srli a2, a0, 3
-; RV32IFD-NEXT:    andi a3, a0, 31
-; RV32IFD-NEXT:    andi a2, a2, 12
-; RV32IFD-NEXT:    xori a3, a3, 31
-; RV32IFD-NEXT:    sub a1, a1, a2
-; RV32IFD-NEXT:    lw a4, 0(a1)
-; RV32IFD-NEXT:    lw a2, 4(a1)
-; RV32IFD-NEXT:    lw a5, 8(a1)
-; RV32IFD-NEXT:    lw a1, 12(a1)
-; RV32IFD-NEXT:    srli a6, a4, 1
-; RV32IFD-NEXT:    srli a7, a2, 1
-; RV32IFD-NEXT:    srli t0, a5, 1
-; RV32IFD-NEXT:    srl a6, a6, a3
-; RV32IFD-NEXT:    srl a7, a7, a3
-; RV32IFD-NEXT:    srl a3, t0, a3
-; RV32IFD-NEXT:    sll a2, a2, a0
-; RV32IFD-NEXT:    sll a5, a5, a0
-; RV32IFD-NEXT:    sll a1, a1, a0
-; RV32IFD-NEXT:    or s3, a2, a6
-; RV32IFD-NEXT:    or a2, a5, a7
-; RV32IFD-NEXT:    or a3, a1, a3
-; RV32IFD-NEXT:    sll s4, a4, a0
-; RV32IFD-NEXT:    mv a0, s8
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    mv s5, a1
-; RV32IFD-NEXT:    mv a0, s0
-; RV32IFD-NEXT:    mv a1, s0
-; RV32IFD-NEXT:    mv a2, s4
-; RV32IFD-NEXT:    mv a3, s3
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add a1, a1, s5
-; RV32IFD-NEXT:    add s1, a0, s2
-; RV32IFD-NEXT:    sltu a0, s1, a0
-; RV32IFD-NEXT:    add s7, a1, a0
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s5, a0
-; RV32IFD-NEXT:    mv s6, a1
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s8
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    mv s2, a0
-; RV32IFD-NEXT:    add s9, s5, a1
-; RV32IFD-NEXT:    sltu a0, s9, s5
-; RV32IFD-NEXT:    add s6, s6, a0
-; RV32IFD-NEXT:    mv a0, s4
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s9, a0, s9
-; RV32IFD-NEXT:    sltu a0, s9, a0
-; RV32IFD-NEXT:    add a0, a1, a0
-; RV32IFD-NEXT:    add s4, s6, a0
-; RV32IFD-NEXT:    sltu s5, s4, s6
-; RV32IFD-NEXT:    mv a0, s3
-; RV32IFD-NEXT:    li a1, 0
-; RV32IFD-NEXT:    mv a2, s0
-; RV32IFD-NEXT:    li a3, 0
-; RV32IFD-NEXT:    call __muldi3
-; RV32IFD-NEXT:    add s5, a1, s5
-; RV32IFD-NEXT:    add s4, a0, s4
-; RV32IFD-NEXT:    sltu a0, s4, a0
-; RV32IFD-NEXT:    add a1, s4, s1
-; RV32IFD-NEXT:    add a0, s5, a0
-; RV32IFD-NEXT:    add a0, a0, s7
-; RV32IFD-NEXT:    sltu a2, a1, s4
-; RV32IFD-NEXT:    add a0, a0, a2
-; RV32IFD-NEXT:    beqz a0, .LBB47_6
-; RV32IFD-NEXT:  .LBB47_8: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    srli a2, a0, 31
-; RV32IFD-NEXT:  .LBB47_9: # %fp-to-i-cleanup
-; RV32IFD-NEXT:    xori a1, a1, 1
-; RV32IFD-NEXT:    or a1, a1, a0
-; RV32IFD-NEXT:    seqz a1, a1
-; RV32IFD-NEXT:    addi a1, a1, -1
-; RV32IFD-NEXT:    and a1, a1, a2
-; RV32IFD-NEXT:    neg a1, a1
-; RV32IFD-NEXT:    and a2, a1, s9
-; RV32IFD-NEXT:    and a3, a1, s2
-; RV32IFD-NEXT:    and a0, a1, a0
-; RV32IFD-NEXT:    srli a0, a0, 31
-; RV32IFD-NEXT:    addi a1, a0, -1
-; RV32IFD-NEXT:    and a0, a1, a3
-; RV32IFD-NEXT:    and a1, a1, a2
-; RV32IFD-NEXT:    lw ra, 140(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s0, 136(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s1, 132(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s2, 128(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s3, 124(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s4, 120(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s5, 116(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s6, 112(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s7, 108(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s8, 104(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s9, 100(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s10, 96(sp) # 4-byte Folded Reload
-; RV32IFD-NEXT:    lw s11, 92(sp) # 4-byte Folded Reload
+; RV32IFD-NEXT:    lw a3, 16(sp)
+; RV32IFD-NEXT:    beqz a2, .LBB47_2
+; RV32IFD-NEXT:  # %bb.1: # %entry
+; RV32IFD-NEXT:    srli a4, a2, 31
+; RV32IFD-NEXT:    j .LBB47_3
+; RV32IFD-NEXT:  .LBB47_2:
+; RV32IFD-NEXT:    seqz a4, a3
+; RV32IFD-NEXT:  .LBB47_3: # %entry
+; RV32IFD-NEXT:    xori a3, a3, 1
+; RV32IFD-NEXT:    or a3, a3, a2
+; RV32IFD-NEXT:    seqz a3, a3
+; RV32IFD-NEXT:    addi a3, a3, -1
+; RV32IFD-NEXT:    and a3, a3, a4
+; RV32IFD-NEXT:    neg a3, a3
+; RV32IFD-NEXT:    and a1, a3, a1
+; RV32IFD-NEXT:    and a0, a3, a0
+; RV32IFD-NEXT:    and a2, a3, a2
+; RV32IFD-NEXT:    srli a2, a2, 31
+; RV32IFD-NEXT:    addi a2, a2, -1
+; RV32IFD-NEXT:    and a0, a2, a0
+; RV32IFD-NEXT:    and a1, a2, a1
+; RV32IFD-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32IFD-NEXT:    .cfi_restore ra
-; RV32IFD-NEXT:    .cfi_restore s0
-; RV32IFD-NEXT:    .cfi_restore s1
-; RV32IFD-NEXT:    .cfi_restore s2
-; RV32IFD-NEXT:    .cfi_restore s3
-; RV32IFD-NEXT:    .cfi_restore s4
-; RV32IFD-NEXT:    .cfi_restore s5
-; RV32IFD-NEXT:    .cfi_restore s6
-; RV32IFD-NEXT:    .cfi_restore s7
-; RV32IFD-NEXT:    .cfi_restore s8
-; RV32IFD-NEXT:    .cfi_restore s9
-; RV32IFD-NEXT:    .cfi_restore s10
-; RV32IFD-NEXT:    .cfi_restore s11
-; RV32IFD-NEXT:    addi sp, sp, 144
+; RV32IFD-NEXT:    addi sp, sp, 32
 ; RV32IFD-NEXT:    .cfi_def_cfa_offset 0
 ; RV32IFD-NEXT:    ret
 entry:
@@ -7230,325 +3390,64 @@ entry:
 
 define i64 @stest_f32i64_mm(float %x) {
 ; RV32-LABEL: stest_f32i64_mm:
-; RV32:       # %bb.0: # %entryfp-to-i-entry
-; RV32-NEXT:    addi sp, sp, -128
-; RV32-NEXT:    .cfi_def_cfa_offset 128
-; RV32-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32:       # %bb.0: # %entry
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    .cfi_offset s0, -8
-; RV32-NEXT:    .cfi_offset s1, -12
-; RV32-NEXT:    .cfi_offset s2, -16
-; RV32-NEXT:    .cfi_offset s3, -20
-; RV32-NEXT:    .cfi_offset s4, -24
-; RV32-NEXT:    .cfi_offset s5, -28
-; RV32-NEXT:    .cfi_offset s6, -32
-; RV32-NEXT:    .cfi_offset s7, -36
-; RV32-NEXT:    .cfi_offset s8, -40
-; RV32-NEXT:    .cfi_offset s9, -44
-; RV32-NEXT:    .cfi_offset s10, -48
-; RV32-NEXT:    .cfi_offset s11, -52
-; RV32-NEXT:    fmv.x.w a1, fa0
-; RV32-NEXT:    slli a0, a1, 1
-; RV32-NEXT:    srli a0, a0, 24
-; RV32-NEXT:    li a2, 127
-; RV32-NEXT:    bgeu a0, a2, .LBB48_2
-; RV32-NEXT:  # %bb.1:
-; RV32-NEXT:    li s2, 0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    li a0, 0
-; RV32-NEXT:    li a2, 0
-; RV32-NEXT:    j .LBB48_7
-; RV32-NEXT:  .LBB48_2: # %fp-to-i-if-end
-; RV32-NEXT:    addi a2, a0, -255
-; RV32-NEXT:    sltu a3, a2, a0
-; RV32-NEXT:    sltiu a2, a2, -128
-; RV32-NEXT:    or a2, a3, a2
-; RV32-NEXT:    beqz a2, .LBB48_4
-; RV32-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32-NEXT:    srli a1, a1, 31
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixsfti
+; RV32-NEXT:    lw a3, 8(sp)
+; RV32-NEXT:    lw a1, 12(sp)
+; RV32-NEXT:    lw a2, 16(sp)
+; RV32-NEXT:    lw a4, 20(sp)
 ; RV32-NEXT:    lui a0, 524288
-; RV32-NEXT:    xori a2, a1, 1
-; RV32-NEXT:    addi s2, a1, -1
-; RV32-NEXT:    sub a2, a0, a2
-; RV32-NEXT:    mv a1, s2
-; RV32-NEXT:    mv a0, s2
-; RV32-NEXT:    j .LBB48_7
-; RV32-NEXT:  .LBB48_4: # %fp-to-i-if-end9
-; RV32-NEXT:    srai s0, a1, 31
-; RV32-NEXT:    slli a1, a1, 9
-; RV32-NEXT:    lui a2, 2048
-; RV32-NEXT:    li a3, 149
-; RV32-NEXT:    srli a1, a1, 9
-; RV32-NEXT:    or a1, a1, a2
-; RV32-NEXT:    ori s8, s0, 1
-; RV32-NEXT:    bltu a3, a0, .LBB48_6
-; RV32-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32-NEXT:    sw zero, 24(sp)
-; RV32-NEXT:    sw zero, 28(sp)
-; RV32-NEXT:    sw zero, 32(sp)
-; RV32-NEXT:    sw zero, 36(sp)
-; RV32-NEXT:    sw a1, 8(sp)
-; RV32-NEXT:    sw zero, 12(sp)
-; RV32-NEXT:    sw zero, 16(sp)
-; RV32-NEXT:    sw zero, 20(sp)
-; RV32-NEXT:    li a1, 150
-; RV32-NEXT:    addi a2, sp, 8
-; RV32-NEXT:    sub a1, a1, a0
-; RV32-NEXT:    srli a0, a1, 3
-; RV32-NEXT:    andi a0, a0, 12
-; RV32-NEXT:    add a0, a2, a0
-; RV32-NEXT:    lw a2, 4(a0)
-; RV32-NEXT:    lw a3, 8(a0)
-; RV32-NEXT:    lw a4, 12(a0)
-; RV32-NEXT:    lw a0, 0(a0)
-; RV32-NEXT:    andi a5, a1, 31
-; RV32-NEXT:    xori a5, a5, 31
-; RV32-NEXT:    slli a6, a4, 1
-; RV32-NEXT:    slli a7, a3, 1
-; RV32-NEXT:    slli t0, a2, 1
-; RV32-NEXT:    sll a6, a6, a5
-; RV32-NEXT:    sll a7, a7, a5
-; RV32-NEXT:    sll a5, t0, a5
-; RV32-NEXT:    srl a3, a3, a1
-; RV32-NEXT:    srl a2, a2, a1
-; RV32-NEXT:    srl a0, a0, a1
-; RV32-NEXT:    or a3, a3, a6
-; RV32-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32-NEXT:    or s5, a2, a7
-; RV32-NEXT:    or s6, a0, a5
-; RV32-NEXT:    srl s4, a4, a1
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s7, a1
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s7, a0, s7
-; RV32-NEXT:    sltu a0, s7, a0
-; RV32-NEXT:    add s9, a1, a0
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s10, a0, s7
-; RV32-NEXT:    sltu a0, s10, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s11, s9, a0
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s1, a0
-; RV32-NEXT:    mv s3, s8
-; RV32-NEXT:    mv s8, a1
-; RV32-NEXT:    add s7, a0, s11
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s6
-; RV32-NEXT:    mv a3, s5
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a3, s4
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv a2, a1
-; RV32-NEXT:    mv a1, s10
-; RV32-NEXT:    add a3, s5, a0
-; RV32-NEXT:    sltu a4, s7, s1
-; RV32-NEXT:    sltu a5, s11, s9
-; RV32-NEXT:    add a2, s6, a2
-; RV32-NEXT:    add a0, s7, a3
-; RV32-NEXT:    add a5, s8, a5
-; RV32-NEXT:    sltu a3, a3, s5
-; RV32-NEXT:    sltu a6, a0, s7
-; RV32-NEXT:    add a4, a5, a4
-; RV32-NEXT:    add a2, a2, a3
-; RV32-NEXT:    add a2, a4, a2
-; RV32-NEXT:    add a2, a2, a6
-; RV32-NEXT:    j .LBB48_7
-; RV32-NEXT:  .LBB48_6: # %fp-to-i-if-else
-; RV32-NEXT:    sw a1, 56(sp)
-; RV32-NEXT:    sw zero, 60(sp)
-; RV32-NEXT:    sw zero, 64(sp)
-; RV32-NEXT:    sw zero, 68(sp)
-; RV32-NEXT:    sw zero, 40(sp)
-; RV32-NEXT:    sw zero, 44(sp)
-; RV32-NEXT:    sw zero, 48(sp)
-; RV32-NEXT:    sw zero, 52(sp)
-; RV32-NEXT:    addi a0, a0, -150
-; RV32-NEXT:    addi a1, sp, 56
-; RV32-NEXT:    srli a2, a0, 3
-; RV32-NEXT:    andi a3, a0, 31
-; RV32-NEXT:    andi a2, a2, 12
-; RV32-NEXT:    xori a3, a3, 31
-; RV32-NEXT:    sub a1, a1, a2
-; RV32-NEXT:    lw a4, 0(a1)
-; RV32-NEXT:    lw a2, 4(a1)
-; RV32-NEXT:    lw a5, 8(a1)
-; RV32-NEXT:    lw a1, 12(a1)
-; RV32-NEXT:    srli a6, a4, 1
-; RV32-NEXT:    srli a7, a2, 1
-; RV32-NEXT:    srli t0, a5, 1
-; RV32-NEXT:    srl a6, a6, a3
-; RV32-NEXT:    srl a7, a7, a3
-; RV32-NEXT:    srl a3, t0, a3
-; RV32-NEXT:    sll a2, a2, a0
-; RV32-NEXT:    sll a5, a5, a0
-; RV32-NEXT:    sll a1, a1, a0
-; RV32-NEXT:    or s3, a2, a6
-; RV32-NEXT:    or a2, a5, a7
-; RV32-NEXT:    or a3, a1, a3
-; RV32-NEXT:    sll s4, a4, a0
-; RV32-NEXT:    mv a0, s8
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s5, a1
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s4
-; RV32-NEXT:    mv a3, s3
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a1, a1, s5
-; RV32-NEXT:    add s1, a0, s2
-; RV32-NEXT:    sltu a0, s1, a0
-; RV32-NEXT:    add s7, a1, a0
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    add s8, s5, a1
-; RV32-NEXT:    sltu a0, s8, s5
-; RV32-NEXT:    add s6, s6, a0
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s8, a0, s8
-; RV32-NEXT:    sltu a0, s8, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s4, s6, a0
-; RV32-NEXT:    sltu s5, s4, s6
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv a2, a1
-; RV32-NEXT:    mv a1, s8
-; RV32-NEXT:    add a2, a2, s5
-; RV32-NEXT:    add s4, a0, s4
-; RV32-NEXT:    sltu a3, s4, a0
-; RV32-NEXT:    add a0, s4, s1
-; RV32-NEXT:    add a2, a2, a3
-; RV32-NEXT:    add a2, a2, s7
-; RV32-NEXT:    sltu a3, a0, s4
-; RV32-NEXT:    add a2, a2, a3
-; RV32-NEXT:  .LBB48_7: # %fp-to-i-cleanup
-; RV32-NEXT:    lui a3, 524288
-; RV32-NEXT:    addi a4, a3, -1
-; RV32-NEXT:    beq a1, a4, .LBB48_9
-; RV32-NEXT:  # %bb.8: # %fp-to-i-cleanup
-; RV32-NEXT:    sltu a5, a1, a4
-; RV32-NEXT:    or a6, a0, a2
-; RV32-NEXT:    bnez a6, .LBB48_10
-; RV32-NEXT:    j .LBB48_11
-; RV32-NEXT:  .LBB48_9:
-; RV32-NEXT:    sltiu a5, s2, -1
-; RV32-NEXT:    or a6, a0, a2
-; RV32-NEXT:    beqz a6, .LBB48_11
-; RV32-NEXT:  .LBB48_10: # %fp-to-i-cleanup
-; RV32-NEXT:    srli a5, a2, 31
-; RV32-NEXT:  .LBB48_11: # %fp-to-i-cleanup
-; RV32-NEXT:    neg a6, a5
-; RV32-NEXT:    addi a7, a5, -1
-; RV32-NEXT:    bnez a5, .LBB48_13
-; RV32-NEXT:  # %bb.12: # %fp-to-i-cleanup
-; RV32-NEXT:    mv a1, a4
-; RV32-NEXT:  .LBB48_13: # %fp-to-i-cleanup
-; RV32-NEXT:    or a4, a7, s2
-; RV32-NEXT:    and a2, a6, a2
-; RV32-NEXT:    and a5, a6, a0
-; RV32-NEXT:    beq a1, a3, .LBB48_15
-; RV32-NEXT:  # %bb.14: # %fp-to-i-cleanup
-; RV32-NEXT:    sltu a0, a3, a1
-; RV32-NEXT:    j .LBB48_16
-; RV32-NEXT:  .LBB48_15:
-; RV32-NEXT:    snez a0, a4
-; RV32-NEXT:  .LBB48_16: # %fp-to-i-cleanup
-; RV32-NEXT:    and a5, a5, a2
-; RV32-NEXT:    li a3, -1
-; RV32-NEXT:    beq a5, a3, .LBB48_18
-; RV32-NEXT:  # %bb.17: # %fp-to-i-cleanup
-; RV32-NEXT:    srli a2, a2, 31
-; RV32-NEXT:    xori a0, a2, 1
-; RV32-NEXT:  .LBB48_18: # %fp-to-i-cleanup
-; RV32-NEXT:    bnez a0, .LBB48_20
-; RV32-NEXT:  # %bb.19: # %fp-to-i-cleanup
+; RV32-NEXT:    addi a5, a0, -1
+; RV32-NEXT:    beq a1, a5, .LBB48_2
+; RV32-NEXT:  # %bb.1: # %entry
+; RV32-NEXT:    sltu a6, a1, a5
+; RV32-NEXT:    or a7, a2, a4
+; RV32-NEXT:    bnez a7, .LBB48_3
+; RV32-NEXT:    j .LBB48_4
+; RV32-NEXT:  .LBB48_2:
+; RV32-NEXT:    sltiu a6, a3, -1
+; RV32-NEXT:    or a7, a2, a4
+; RV32-NEXT:    beqz a7, .LBB48_4
+; RV32-NEXT:  .LBB48_3: # %entry
+; RV32-NEXT:    srli a6, a4, 31
+; RV32-NEXT:  .LBB48_4: # %entry
+; RV32-NEXT:    neg a7, a6
+; RV32-NEXT:    addi t0, a6, -1
+; RV32-NEXT:    bnez a6, .LBB48_6
+; RV32-NEXT:  # %bb.5: # %entry
+; RV32-NEXT:    mv a1, a5
+; RV32-NEXT:  .LBB48_6: # %entry
+; RV32-NEXT:    or a3, t0, a3
+; RV32-NEXT:    and a4, a7, a4
+; RV32-NEXT:    and a2, a7, a2
+; RV32-NEXT:    beq a1, a0, .LBB48_8
+; RV32-NEXT:  # %bb.7: # %entry
+; RV32-NEXT:    sltu a0, a0, a1
+; RV32-NEXT:    j .LBB48_9
+; RV32-NEXT:  .LBB48_8:
+; RV32-NEXT:    snez a0, a3
+; RV32-NEXT:  .LBB48_9: # %entry
+; RV32-NEXT:    and a2, a2, a4
+; RV32-NEXT:    li a5, -1
+; RV32-NEXT:    beq a2, a5, .LBB48_11
+; RV32-NEXT:  # %bb.10: # %entry
+; RV32-NEXT:    srli a4, a4, 31
+; RV32-NEXT:    xori a0, a4, 1
+; RV32-NEXT:  .LBB48_11: # %entry
+; RV32-NEXT:    bnez a0, .LBB48_13
+; RV32-NEXT:  # %bb.12: # %entry
 ; RV32-NEXT:    lui a1, 524288
-; RV32-NEXT:  .LBB48_20: # %fp-to-i-cleanup
+; RV32-NEXT:  .LBB48_13: # %entry
 ; RV32-NEXT:    neg a0, a0
-; RV32-NEXT:    and a0, a0, a4
-; RV32-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32-NEXT:    and a0, a0, a3
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    .cfi_restore s0
-; RV32-NEXT:    .cfi_restore s1
-; RV32-NEXT:    .cfi_restore s2
-; RV32-NEXT:    .cfi_restore s3
-; RV32-NEXT:    .cfi_restore s4
-; RV32-NEXT:    .cfi_restore s5
-; RV32-NEXT:    .cfi_restore s6
-; RV32-NEXT:    .cfi_restore s7
-; RV32-NEXT:    .cfi_restore s8
-; RV32-NEXT:    .cfi_restore s9
-; RV32-NEXT:    .cfi_restore s10
-; RV32-NEXT:    .cfi_restore s11
-; RV32-NEXT:    addi sp, sp, 128
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
@@ -7570,287 +3469,30 @@ entry:
 
 define i64 @utest_f32i64_mm(float %x) {
 ; RV32-LABEL: utest_f32i64_mm:
-; RV32:       # %bb.0: # %entryfp-to-i-entry
-; RV32-NEXT:    addi sp, sp, -128
-; RV32-NEXT:    .cfi_def_cfa_offset 128
-; RV32-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32:       # %bb.0: # %entry
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    .cfi_offset s0, -8
-; RV32-NEXT:    .cfi_offset s1, -12
-; RV32-NEXT:    .cfi_offset s2, -16
-; RV32-NEXT:    .cfi_offset s3, -20
-; RV32-NEXT:    .cfi_offset s4, -24
-; RV32-NEXT:    .cfi_offset s5, -28
-; RV32-NEXT:    .cfi_offset s6, -32
-; RV32-NEXT:    .cfi_offset s7, -36
-; RV32-NEXT:    .cfi_offset s8, -40
-; RV32-NEXT:    .cfi_offset s9, -44
-; RV32-NEXT:    .cfi_offset s10, -48
-; RV32-NEXT:    .cfi_offset s11, -52
-; RV32-NEXT:    fmv.x.w a1, fa0
-; RV32-NEXT:    slli a0, a1, 1
-; RV32-NEXT:    srli a0, a0, 24
-; RV32-NEXT:    li a2, 127
-; RV32-NEXT:    bgeu a0, a2, .LBB49_2
-; RV32-NEXT:  # %bb.1:
-; RV32-NEXT:    li s2, 0
-; RV32-NEXT:    li s9, 0
-; RV32-NEXT:    li a0, 0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    j .LBB49_7
-; RV32-NEXT:  .LBB49_2: # %fp-to-i-if-end
-; RV32-NEXT:    addi a2, a0, -255
-; RV32-NEXT:    sltu a3, a2, a0
-; RV32-NEXT:    sltiu a2, a2, -128
-; RV32-NEXT:    or a2, a3, a2
-; RV32-NEXT:    beqz a2, .LBB49_4
-; RV32-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32-NEXT:    srli a1, a1, 31
-; RV32-NEXT:    lui a0, 524288
-; RV32-NEXT:    xori a2, a1, 1
-; RV32-NEXT:    addi s2, a1, -1
-; RV32-NEXT:    sub a1, a0, a2
-; RV32-NEXT:    mv s9, s2
-; RV32-NEXT:    mv a0, s2
-; RV32-NEXT:    j .LBB49_7
-; RV32-NEXT:  .LBB49_4: # %fp-to-i-if-end9
-; RV32-NEXT:    srai s0, a1, 31
-; RV32-NEXT:    slli a1, a1, 9
-; RV32-NEXT:    lui a2, 2048
-; RV32-NEXT:    li a3, 149
-; RV32-NEXT:    srli a1, a1, 9
-; RV32-NEXT:    or a1, a1, a2
-; RV32-NEXT:    ori s8, s0, 1
-; RV32-NEXT:    bltu a3, a0, .LBB49_6
-; RV32-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32-NEXT:    sw zero, 24(sp)
-; RV32-NEXT:    sw zero, 28(sp)
-; RV32-NEXT:    sw zero, 32(sp)
-; RV32-NEXT:    sw zero, 36(sp)
-; RV32-NEXT:    sw a1, 8(sp)
-; RV32-NEXT:    sw zero, 12(sp)
-; RV32-NEXT:    sw zero, 16(sp)
-; RV32-NEXT:    sw zero, 20(sp)
-; RV32-NEXT:    li a1, 150
-; RV32-NEXT:    addi a2, sp, 8
-; RV32-NEXT:    sub a1, a1, a0
-; RV32-NEXT:    srli a0, a1, 3
-; RV32-NEXT:    andi a0, a0, 12
-; RV32-NEXT:    add a0, a2, a0
-; RV32-NEXT:    lw a2, 4(a0)
-; RV32-NEXT:    lw a3, 8(a0)
-; RV32-NEXT:    lw a4, 12(a0)
-; RV32-NEXT:    lw a0, 0(a0)
-; RV32-NEXT:    andi a5, a1, 31
-; RV32-NEXT:    xori a5, a5, 31
-; RV32-NEXT:    slli a6, a4, 1
-; RV32-NEXT:    slli a7, a3, 1
-; RV32-NEXT:    slli t0, a2, 1
-; RV32-NEXT:    sll a6, a6, a5
-; RV32-NEXT:    sll a7, a7, a5
-; RV32-NEXT:    sll a5, t0, a5
-; RV32-NEXT:    srl a3, a3, a1
-; RV32-NEXT:    srl a2, a2, a1
-; RV32-NEXT:    srl a0, a0, a1
-; RV32-NEXT:    or a3, a3, a6
-; RV32-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32-NEXT:    or s5, a2, a7
-; RV32-NEXT:    or s6, a0, a5
-; RV32-NEXT:    srl s4, a4, a1
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s7, a1
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s7, a0, s7
-; RV32-NEXT:    sltu a0, s7, a0
-; RV32-NEXT:    add s10, a1, a0
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s9, a0, s7
-; RV32-NEXT:    sltu a0, s9, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s11, s10, a0
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s1, a0
-; RV32-NEXT:    mv s3, s8
-; RV32-NEXT:    mv s8, a1
-; RV32-NEXT:    add s7, a0, s11
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s6
-; RV32-NEXT:    mv a3, s5
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a3, s4
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a2, s5, a0
-; RV32-NEXT:    sltu a3, s7, s1
-; RV32-NEXT:    sltu a4, s11, s10
-; RV32-NEXT:    add a1, s6, a1
-; RV32-NEXT:    add a0, s7, a2
-; RV32-NEXT:    add a4, s8, a4
-; RV32-NEXT:    sltu a2, a2, s5
-; RV32-NEXT:    sltu a5, a0, s7
-; RV32-NEXT:    add a3, a4, a3
-; RV32-NEXT:    add a1, a1, a2
-; RV32-NEXT:    add a1, a3, a1
-; RV32-NEXT:    add a1, a1, a5
-; RV32-NEXT:    j .LBB49_7
-; RV32-NEXT:  .LBB49_6: # %fp-to-i-if-else
-; RV32-NEXT:    sw a1, 56(sp)
-; RV32-NEXT:    sw zero, 60(sp)
-; RV32-NEXT:    sw zero, 64(sp)
-; RV32-NEXT:    sw zero, 68(sp)
-; RV32-NEXT:    sw zero, 40(sp)
-; RV32-NEXT:    sw zero, 44(sp)
-; RV32-NEXT:    sw zero, 48(sp)
-; RV32-NEXT:    sw zero, 52(sp)
-; RV32-NEXT:    addi a0, a0, -150
-; RV32-NEXT:    addi a1, sp, 56
-; RV32-NEXT:    srli a2, a0, 3
-; RV32-NEXT:    andi a3, a0, 31
-; RV32-NEXT:    andi a2, a2, 12
-; RV32-NEXT:    xori a3, a3, 31
-; RV32-NEXT:    sub a1, a1, a2
-; RV32-NEXT:    lw a4, 0(a1)
-; RV32-NEXT:    lw a2, 4(a1)
-; RV32-NEXT:    lw a5, 8(a1)
-; RV32-NEXT:    lw a1, 12(a1)
-; RV32-NEXT:    srli a6, a4, 1
-; RV32-NEXT:    srli a7, a2, 1
-; RV32-NEXT:    srli t0, a5, 1
-; RV32-NEXT:    srl a6, a6, a3
-; RV32-NEXT:    srl a7, a7, a3
-; RV32-NEXT:    srl a3, t0, a3
-; RV32-NEXT:    sll a2, a2, a0
-; RV32-NEXT:    sll a5, a5, a0
-; RV32-NEXT:    sll a1, a1, a0
-; RV32-NEXT:    or s3, a2, a6
-; RV32-NEXT:    or a2, a5, a7
-; RV32-NEXT:    or a3, a1, a3
-; RV32-NEXT:    sll s4, a4, a0
-; RV32-NEXT:    mv a0, s8
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s5, a1
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s4
-; RV32-NEXT:    mv a3, s3
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a1, a1, s5
-; RV32-NEXT:    add s1, a0, s2
-; RV32-NEXT:    sltu a0, s1, a0
-; RV32-NEXT:    add s7, a1, a0
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    add s9, s5, a1
-; RV32-NEXT:    sltu a0, s9, s5
-; RV32-NEXT:    add s6, s6, a0
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s9, a0, s9
-; RV32-NEXT:    sltu a0, s9, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s4, s6, a0
-; RV32-NEXT:    sltu s5, s4, s6
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a1, a1, s5
-; RV32-NEXT:    add s4, a0, s4
-; RV32-NEXT:    sltu a2, s4, a0
-; RV32-NEXT:    add a0, s4, s1
-; RV32-NEXT:    add a1, a1, a2
-; RV32-NEXT:    add a1, a1, s7
-; RV32-NEXT:    sltu a2, a0, s4
-; RV32-NEXT:    add a1, a1, a2
-; RV32-NEXT:  .LBB49_7: # %fp-to-i-cleanup
-; RV32-NEXT:    or a2, a1, a0
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixunssfti
+; RV32-NEXT:    lw a0, 16(sp)
+; RV32-NEXT:    lw a1, 20(sp)
+; RV32-NEXT:    lw a2, 12(sp)
+; RV32-NEXT:    lw a3, 8(sp)
+; RV32-NEXT:    or a4, a1, a0
 ; RV32-NEXT:    xori a0, a0, 1
-; RV32-NEXT:    seqz a2, a2
+; RV32-NEXT:    seqz a4, a4
 ; RV32-NEXT:    or a0, a0, a1
 ; RV32-NEXT:    seqz a0, a0
 ; RV32-NEXT:    addi a0, a0, -1
-; RV32-NEXT:    and a0, a0, a2
+; RV32-NEXT:    and a0, a0, a4
 ; RV32-NEXT:    neg a1, a0
-; RV32-NEXT:    and a0, a1, s2
-; RV32-NEXT:    and a1, a1, s9
-; RV32-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32-NEXT:    and a0, a1, a3
+; RV32-NEXT:    and a1, a1, a2
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    .cfi_restore s0
-; RV32-NEXT:    .cfi_restore s1
-; RV32-NEXT:    .cfi_restore s2
-; RV32-NEXT:    .cfi_restore s3
-; RV32-NEXT:    .cfi_restore s4
-; RV32-NEXT:    .cfi_restore s5
-; RV32-NEXT:    .cfi_restore s6
-; RV32-NEXT:    .cfi_restore s7
-; RV32-NEXT:    .cfi_restore s8
-; RV32-NEXT:    .cfi_restore s9
-; RV32-NEXT:    .cfi_restore s10
-; RV32-NEXT:    .cfi_restore s11
-; RV32-NEXT:    addi sp, sp, 128
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
@@ -7878,297 +3520,40 @@ entry:
 
 define i64 @ustest_f32i64_mm(float %x) {
 ; RV32-LABEL: ustest_f32i64_mm:
-; RV32:       # %bb.0: # %entryfp-to-i-entry
-; RV32-NEXT:    addi sp, sp, -128
-; RV32-NEXT:    .cfi_def_cfa_offset 128
-; RV32-NEXT:    sw ra, 124(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s0, 120(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s1, 116(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s2, 112(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s3, 108(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s4, 104(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s5, 100(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s6, 96(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s7, 92(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s8, 88(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s9, 84(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s10, 80(sp) # 4-byte Folded Spill
-; RV32-NEXT:    sw s11, 76(sp) # 4-byte Folded Spill
+; RV32:       # %bb.0: # %entry
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
-; RV32-NEXT:    .cfi_offset s0, -8
-; RV32-NEXT:    .cfi_offset s1, -12
-; RV32-NEXT:    .cfi_offset s2, -16
-; RV32-NEXT:    .cfi_offset s3, -20
-; RV32-NEXT:    .cfi_offset s4, -24
-; RV32-NEXT:    .cfi_offset s5, -28
-; RV32-NEXT:    .cfi_offset s6, -32
-; RV32-NEXT:    .cfi_offset s7, -36
-; RV32-NEXT:    .cfi_offset s8, -40
-; RV32-NEXT:    .cfi_offset s9, -44
-; RV32-NEXT:    .cfi_offset s10, -48
-; RV32-NEXT:    .cfi_offset s11, -52
-; RV32-NEXT:    fmv.x.w a1, fa0
-; RV32-NEXT:    slli a0, a1, 1
-; RV32-NEXT:    srli a0, a0, 24
-; RV32-NEXT:    li a2, 127
-; RV32-NEXT:    bgeu a0, a2, .LBB50_2
-; RV32-NEXT:  # %bb.1:
-; RV32-NEXT:    li s2, 0
-; RV32-NEXT:    li s9, 0
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    li a0, 0
-; RV32-NEXT:    j .LBB50_6
-; RV32-NEXT:  .LBB50_2: # %fp-to-i-if-end
-; RV32-NEXT:    addi a2, a0, -255
-; RV32-NEXT:    sltu a3, a2, a0
-; RV32-NEXT:    sltiu a2, a2, -128
-; RV32-NEXT:    or a2, a3, a2
-; RV32-NEXT:    beqz a2, .LBB50_4
-; RV32-NEXT:  # %bb.3: # %fp-to-i-if-then5
-; RV32-NEXT:    srli a1, a1, 31
-; RV32-NEXT:    lui a0, 524288
-; RV32-NEXT:    xori a2, a1, 1
-; RV32-NEXT:    addi s2, a1, -1
-; RV32-NEXT:    sub a0, a0, a2
-; RV32-NEXT:    mv s9, s2
-; RV32-NEXT:    mv a1, s2
-; RV32-NEXT:    beqz a0, .LBB50_6
-; RV32-NEXT:    j .LBB50_8
-; RV32-NEXT:  .LBB50_4: # %fp-to-i-if-end9
-; RV32-NEXT:    srai s0, a1, 31
-; RV32-NEXT:    slli a1, a1, 9
-; RV32-NEXT:    lui a2, 2048
-; RV32-NEXT:    li a3, 149
-; RV32-NEXT:    srli a1, a1, 9
-; RV32-NEXT:    or a1, a1, a2
-; RV32-NEXT:    ori s8, s0, 1
-; RV32-NEXT:    bltu a3, a0, .LBB50_7
-; RV32-NEXT:  # %bb.5: # %fp-to-i-if-then12
-; RV32-NEXT:    sw zero, 24(sp)
-; RV32-NEXT:    sw zero, 28(sp)
-; RV32-NEXT:    sw zero, 32(sp)
-; RV32-NEXT:    sw zero, 36(sp)
-; RV32-NEXT:    sw a1, 8(sp)
-; RV32-NEXT:    sw zero, 12(sp)
-; RV32-NEXT:    sw zero, 16(sp)
-; RV32-NEXT:    sw zero, 20(sp)
-; RV32-NEXT:    li a1, 150
-; RV32-NEXT:    addi a2, sp, 8
-; RV32-NEXT:    sub a1, a1, a0
-; RV32-NEXT:    srli a0, a1, 3
-; RV32-NEXT:    andi a0, a0, 12
-; RV32-NEXT:    add a0, a2, a0
-; RV32-NEXT:    lw a2, 4(a0)
-; RV32-NEXT:    lw a3, 8(a0)
-; RV32-NEXT:    lw a4, 12(a0)
-; RV32-NEXT:    lw a0, 0(a0)
-; RV32-NEXT:    andi a5, a1, 31
-; RV32-NEXT:    xori a5, a5, 31
-; RV32-NEXT:    slli a6, a4, 1
-; RV32-NEXT:    slli a7, a3, 1
-; RV32-NEXT:    slli t0, a2, 1
-; RV32-NEXT:    sll a6, a6, a5
-; RV32-NEXT:    sll a7, a7, a5
-; RV32-NEXT:    sll a5, t0, a5
-; RV32-NEXT:    srl a3, a3, a1
-; RV32-NEXT:    srl a2, a2, a1
-; RV32-NEXT:    srl a0, a0, a1
-; RV32-NEXT:    or a3, a3, a6
-; RV32-NEXT:    sw a3, 4(sp) # 4-byte Folded Spill
-; RV32-NEXT:    or s5, a2, a7
-; RV32-NEXT:    or s6, a0, a5
-; RV32-NEXT:    srl s4, a4, a1
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s7, a1
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s7, a0, s7
-; RV32-NEXT:    sltu a0, s7, a0
-; RV32-NEXT:    add s10, a1, a0
-; RV32-NEXT:    mv a0, s6
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s9, a0, s7
-; RV32-NEXT:    sltu a0, s9, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s11, s10, a0
-; RV32-NEXT:    mv a0, s5
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s1, a0
-; RV32-NEXT:    mv s3, s8
-; RV32-NEXT:    mv s8, a1
-; RV32-NEXT:    add s7, a0, s11
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s6
-; RV32-NEXT:    mv a3, s5
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    lw a2, 4(sp) # 4-byte Folded Reload
-; RV32-NEXT:    mv a3, s4
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a0, s5, a0
-; RV32-NEXT:    sltu a2, s7, s1
-; RV32-NEXT:    sltu a3, s11, s10
-; RV32-NEXT:    add s6, s6, a1
-; RV32-NEXT:    add a1, s7, a0
-; RV32-NEXT:    add a3, s8, a3
-; RV32-NEXT:    sltu a0, a0, s5
-; RV32-NEXT:    sltu a4, a1, s7
-; RV32-NEXT:    add a2, a3, a2
-; RV32-NEXT:    add a0, s6, a0
-; RV32-NEXT:    add a0, a2, a0
-; RV32-NEXT:    add a0, a0, a4
-; RV32-NEXT:    bnez a0, .LBB50_8
-; RV32-NEXT:  .LBB50_6:
-; RV32-NEXT:    seqz a2, a1
-; RV32-NEXT:    j .LBB50_9
-; RV32-NEXT:  .LBB50_7: # %fp-to-i-if-else
-; RV32-NEXT:    sw a1, 56(sp)
-; RV32-NEXT:    sw zero, 60(sp)
-; RV32-NEXT:    sw zero, 64(sp)
-; RV32-NEXT:    sw zero, 68(sp)
-; RV32-NEXT:    sw zero, 40(sp)
-; RV32-NEXT:    sw zero, 44(sp)
-; RV32-NEXT:    sw zero, 48(sp)
-; RV32-NEXT:    sw zero, 52(sp)
-; RV32-NEXT:    addi a0, a0, -150
-; RV32-NEXT:    addi a1, sp, 56
-; RV32-NEXT:    srli a2, a0, 3
-; RV32-NEXT:    andi a3, a0, 31
-; RV32-NEXT:    andi a2, a2, 12
-; RV32-NEXT:    xori a3, a3, 31
-; RV32-NEXT:    sub a1, a1, a2
-; RV32-NEXT:    lw a4, 0(a1)
-; RV32-NEXT:    lw a2, 4(a1)
-; RV32-NEXT:    lw a5, 8(a1)
-; RV32-NEXT:    lw a1, 12(a1)
-; RV32-NEXT:    srli a6, a4, 1
-; RV32-NEXT:    srli a7, a2, 1
-; RV32-NEXT:    srli t0, a5, 1
-; RV32-NEXT:    srl a6, a6, a3
-; RV32-NEXT:    srl a7, a7, a3
-; RV32-NEXT:    srl a3, t0, a3
-; RV32-NEXT:    sll a2, a2, a0
-; RV32-NEXT:    sll a5, a5, a0
-; RV32-NEXT:    sll a1, a1, a0
-; RV32-NEXT:    or s3, a2, a6
-; RV32-NEXT:    or a2, a5, a7
-; RV32-NEXT:    or a3, a1, a3
-; RV32-NEXT:    sll s4, a4, a0
-; RV32-NEXT:    mv a0, s8
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    mv s5, a1
-; RV32-NEXT:    mv a0, s0
-; RV32-NEXT:    mv a1, s0
-; RV32-NEXT:    mv a2, s4
-; RV32-NEXT:    mv a3, s3
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add a1, a1, s5
-; RV32-NEXT:    add s1, a0, s2
-; RV32-NEXT:    sltu a0, s1, a0
-; RV32-NEXT:    add s7, a1, a0
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s5, a0
-; RV32-NEXT:    mv s6, a1
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s8
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    mv s2, a0
-; RV32-NEXT:    add s9, s5, a1
-; RV32-NEXT:    sltu a0, s9, s5
-; RV32-NEXT:    add s6, s6, a0
-; RV32-NEXT:    mv a0, s4
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s9, a0, s9
-; RV32-NEXT:    sltu a0, s9, a0
-; RV32-NEXT:    add a0, a1, a0
-; RV32-NEXT:    add s4, s6, a0
-; RV32-NEXT:    sltu s5, s4, s6
-; RV32-NEXT:    mv a0, s3
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    mv a2, s0
-; RV32-NEXT:    li a3, 0
-; RV32-NEXT:    call __muldi3
-; RV32-NEXT:    add s5, a1, s5
-; RV32-NEXT:    add s4, a0, s4
-; RV32-NEXT:    sltu a0, s4, a0
-; RV32-NEXT:    add a1, s4, s1
-; RV32-NEXT:    add a0, s5, a0
-; RV32-NEXT:    add a0, a0, s7
-; RV32-NEXT:    sltu a2, a1, s4
-; RV32-NEXT:    add a0, a0, a2
-; RV32-NEXT:    beqz a0, .LBB50_6
-; RV32-NEXT:  .LBB50_8: # %fp-to-i-cleanup
-; RV32-NEXT:    srli a2, a0, 31
-; RV32-NEXT:  .LBB50_9: # %fp-to-i-cleanup
-; RV32-NEXT:    xori a1, a1, 1
-; RV32-NEXT:    or a1, a1, a0
-; RV32-NEXT:    seqz a1, a1
-; RV32-NEXT:    addi a1, a1, -1
-; RV32-NEXT:    and a1, a1, a2
-; RV32-NEXT:    neg a1, a1
-; RV32-NEXT:    and a2, a1, s9
-; RV32-NEXT:    and a3, a1, s2
-; RV32-NEXT:    and a0, a1, a0
-; RV32-NEXT:    srli a0, a0, 31
-; RV32-NEXT:    addi a1, a0, -1
-; RV32-NEXT:    and a0, a1, a3
-; RV32-NEXT:    and a1, a1, a2
-; RV32-NEXT:    lw ra, 124(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s0, 120(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s1, 116(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s2, 112(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s3, 108(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s4, 104(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s5, 100(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s6, 96(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s7, 92(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s8, 88(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s9, 84(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s10, 80(sp) # 4-byte Folded Reload
-; RV32-NEXT:    lw s11, 76(sp) # 4-byte Folded Reload
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixsfti
+; RV32-NEXT:    lw a0, 8(sp)
+; RV32-NEXT:    lw a1, 12(sp)
+; RV32-NEXT:    lw a2, 20(sp)
+; RV32-NEXT:    lw a3, 16(sp)
+; RV32-NEXT:    beqz a2, .LBB50_2
+; RV32-NEXT:  # %bb.1: # %entry
+; RV32-NEXT:    srli a4, a2, 31
+; RV32-NEXT:    j .LBB50_3
+; RV32-NEXT:  .LBB50_2:
+; RV32-NEXT:    seqz a4, a3
+; RV32-NEXT:  .LBB50_3: # %entry
+; RV32-NEXT:    xori a3, a3, 1
+; RV32-NEXT:    or a3, a3, a2
+; RV32-NEXT:    seqz a3, a3
+; RV32-NEXT:    addi a3, a3, -1
+; RV32-NEXT:    and a3, a3, a4
+; RV32-NEXT:    neg a3, a3
+; RV32-NEXT:    and a1, a3, a1
+; RV32-NEXT:    and a0, a3, a0
+; RV32-NEXT:    and a2, a3, a2
+; RV32-NEXT:    srli a2, a2, 31
+; RV32-NEXT:    addi a2, a2, -1
+; RV32-NEXT:    and a0, a2, a0
+; RV32-NEXT:    and a1, a2, a1
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    .cfi_restore s0
-; RV32-NEXT:    .cfi_restore s1
-; RV32-NEXT:    .cfi_restore s2
-; RV32-NEXT:    .cfi_restore s3
-; RV32-NEXT:    .cfi_restore s4
-; RV32-NEXT:    .cfi_restore s5
-; RV32-NEXT:    .cfi_restore s6
-; RV32-NEXT:    .cfi_restore s7
-; RV32-NEXT:    .cfi_restore s8
-; RV32-NEXT:    .cfi_restore s9
-; RV32-NEXT:    .cfi_restore s10
-; RV32-NEXT:    .cfi_restore s11
-; RV32-NEXT:    addi sp, sp, 128
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
@@ -8206,16 +3591,64 @@ entry:
 define i64 @stest_f16i64_mm(half %x) {
 ; RV32-LABEL: stest_f16i64_mm:
 ; RV32:       # %bb.0: # %entry
-; RV32-NEXT:    addi sp, sp, -16
-; RV32-NEXT:    .cfi_def_cfa_offset 16
-; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
 ; RV32-NEXT:    call __extendhfsf2
-; RV32-NEXT:    fcvt.w.s a0, fa0, rtz
-; RV32-NEXT:    srai a1, a0, 31
-; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixsfti
+; RV32-NEXT:    lw a3, 8(sp)
+; RV32-NEXT:    lw a1, 12(sp)
+; RV32-NEXT:    lw a2, 16(sp)
+; RV32-NEXT:    lw a4, 20(sp)
+; RV32-NEXT:    lui a0, 524288
+; RV32-NEXT:    addi a5, a0, -1
+; RV32-NEXT:    beq a1, a5, .LBB51_2
+; RV32-NEXT:  # %bb.1: # %entry
+; RV32-NEXT:    sltu a6, a1, a5
+; RV32-NEXT:    or a7, a2, a4
+; RV32-NEXT:    bnez a7, .LBB51_3
+; RV32-NEXT:    j .LBB51_4
+; RV32-NEXT:  .LBB51_2:
+; RV32-NEXT:    sltiu a6, a3, -1
+; RV32-NEXT:    or a7, a2, a4
+; RV32-NEXT:    beqz a7, .LBB51_4
+; RV32-NEXT:  .LBB51_3: # %entry
+; RV32-NEXT:    srli a6, a4, 31
+; RV32-NEXT:  .LBB51_4: # %entry
+; RV32-NEXT:    neg a7, a6
+; RV32-NEXT:    addi t0, a6, -1
+; RV32-NEXT:    bnez a6, .LBB51_6
+; RV32-NEXT:  # %bb.5: # %entry
+; RV32-NEXT:    mv a1, a5
+; RV32-NEXT:  .LBB51_6: # %entry
+; RV32-NEXT:    or a3, t0, a3
+; RV32-NEXT:    and a4, a7, a4
+; RV32-NEXT:    and a2, a7, a2
+; RV32-NEXT:    beq a1, a0, .LBB51_8
+; RV32-NEXT:  # %bb.7: # %entry
+; RV32-NEXT:    sltu a0, a0, a1
+; RV32-NEXT:    j .LBB51_9
+; RV32-NEXT:  .LBB51_8:
+; RV32-NEXT:    snez a0, a3
+; RV32-NEXT:  .LBB51_9: # %entry
+; RV32-NEXT:    and a2, a2, a4
+; RV32-NEXT:    li a5, -1
+; RV32-NEXT:    beq a2, a5, .LBB51_11
+; RV32-NEXT:  # %bb.10: # %entry
+; RV32-NEXT:    srli a4, a4, 31
+; RV32-NEXT:    xori a0, a4, 1
+; RV32-NEXT:  .LBB51_11: # %entry
+; RV32-NEXT:    bnez a0, .LBB51_13
+; RV32-NEXT:  # %bb.12: # %entry
+; RV32-NEXT:    lui a1, 524288
+; RV32-NEXT:  .LBB51_13: # %entry
+; RV32-NEXT:    neg a0, a0
+; RV32-NEXT:    and a0, a0, a3
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    addi sp, sp, 16
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
@@ -8271,16 +3704,30 @@ entry:
 define i64 @utesth_f16i64_mm(half %x) {
 ; RV32-LABEL: utesth_f16i64_mm:
 ; RV32:       # %bb.0: # %entry
-; RV32-NEXT:    addi sp, sp, -16
-; RV32-NEXT:    .cfi_def_cfa_offset 16
-; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
 ; RV32-NEXT:    call __extendhfsf2
-; RV32-NEXT:    fcvt.wu.s a0, fa0, rtz
-; RV32-NEXT:    li a1, 0
-; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixunssfti
+; RV32-NEXT:    lw a0, 16(sp)
+; RV32-NEXT:    lw a1, 20(sp)
+; RV32-NEXT:    lw a2, 12(sp)
+; RV32-NEXT:    lw a3, 8(sp)
+; RV32-NEXT:    or a4, a1, a0
+; RV32-NEXT:    xori a0, a0, 1
+; RV32-NEXT:    seqz a4, a4
+; RV32-NEXT:    or a0, a0, a1
+; RV32-NEXT:    seqz a0, a0
+; RV32-NEXT:    addi a0, a0, -1
+; RV32-NEXT:    and a0, a0, a4
+; RV32-NEXT:    neg a1, a0
+; RV32-NEXT:    and a0, a1, a3
+; RV32-NEXT:    and a1, a1, a2
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    addi sp, sp, 16
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;
@@ -8310,30 +3757,40 @@ entry:
 define i64 @ustest_f16i64_mm(half %x) {
 ; RV32-LABEL: ustest_f16i64_mm:
 ; RV32:       # %bb.0: # %entry
-; RV32-NEXT:    addi sp, sp, -16
-; RV32-NEXT:    .cfi_def_cfa_offset 16
-; RV32-NEXT:    sw ra, 12(sp) # 4-byte Folded Spill
+; RV32-NEXT:    addi sp, sp, -32
+; RV32-NEXT:    .cfi_def_cfa_offset 32
+; RV32-NEXT:    sw ra, 28(sp) # 4-byte Folded Spill
 ; RV32-NEXT:    .cfi_offset ra, -4
 ; RV32-NEXT:    call __extendhfsf2
-; RV32-NEXT:    fcvt.w.s a0, fa0, rtz
-; RV32-NEXT:    srai a1, a0, 31
-; RV32-NEXT:    srli a2, a1, 31
-; RV32-NEXT:    seqz a3, a1
-; RV32-NEXT:    or a2, a3, a2
-; RV32-NEXT:    ori a3, a1, 1
+; RV32-NEXT:    addi a0, sp, 8
+; RV32-NEXT:    call __fixsfti
+; RV32-NEXT:    lw a0, 8(sp)
+; RV32-NEXT:    lw a1, 12(sp)
+; RV32-NEXT:    lw a2, 20(sp)
+; RV32-NEXT:    lw a3, 16(sp)
+; RV32-NEXT:    beqz a2, .LBB53_2
+; RV32-NEXT:  # %bb.1: # %entry
+; RV32-NEXT:    srli a4, a2, 31
+; RV32-NEXT:    j .LBB53_3
+; RV32-NEXT:  .LBB53_2:
+; RV32-NEXT:    seqz a4, a3
+; RV32-NEXT:  .LBB53_3: # %entry
+; RV32-NEXT:    xori a3, a3, 1
+; RV32-NEXT:    or a3, a3, a2
 ; RV32-NEXT:    seqz a3, a3
 ; RV32-NEXT:    addi a3, a3, -1
+; RV32-NEXT:    and a3, a3, a4
+; RV32-NEXT:    neg a3, a3
+; RV32-NEXT:    and a1, a3, a1
+; RV32-NEXT:    and a0, a3, a0
 ; RV32-NEXT:    and a2, a3, a2
-; RV32-NEXT:    neg a2, a2
-; RV32-NEXT:    and a0, a2, a0
-; RV32-NEXT:    and a1, a2, a1
-; RV32-NEXT:    srli a2, a1, 31
+; RV32-NEXT:    srli a2, a2, 31
 ; RV32-NEXT:    addi a2, a2, -1
 ; RV32-NEXT:    and a0, a2, a0
 ; RV32-NEXT:    and a1, a2, a1
-; RV32-NEXT:    lw ra, 12(sp) # 4-byte Folded Reload
+; RV32-NEXT:    lw ra, 28(sp) # 4-byte Folded Reload
 ; RV32-NEXT:    .cfi_restore ra
-; RV32-NEXT:    addi sp, sp, 16
+; RV32-NEXT:    addi sp, sp, 32
 ; RV32-NEXT:    .cfi_def_cfa_offset 0
 ; RV32-NEXT:    ret
 ;



More information about the llvm-branch-commits mailing list