[AArch64] Fix assert AArch64TargetLowering::ReplaceNodeResults

Don't know how to custom expand this
UNREACHABLE executed at llvm-project/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:16788

The fix is to provide missing expansions for:
  case ISD::STRICT_FP_TO_UINT:
  case ISD::STRICT_FP_TO_SINT:

A test case is provided.

Reviewed By: dmgreen

Differential Revision: https://reviews.llvm.org/D107452
This commit is contained in:
Simon Wallis 2021-08-04 16:17:20 +01:00
parent b8f612e780
commit 9269752671
2 changed files with 25 additions and 0 deletions

View File

@ -17320,6 +17320,8 @@ void AArch64TargetLowering::ReplaceNodeResults(
return;
case ISD::FP_TO_UINT:
case ISD::FP_TO_SINT:
case ISD::STRICT_FP_TO_SINT:
case ISD::STRICT_FP_TO_UINT:
assert(N->getValueType(0) == MVT::i128 && "unexpected illegal conversion");
// Let normal code take care of it by not adding anything to Results.
return;

View File

@ -0,0 +1,23 @@
; RUN: llc < %s | FileCheck %s
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-arm-none-eabi"
define i128 @test_fixtfti(fp128 %ld) {
; CHECK-LABEL: test_fixtfti:
; CHECK: bl __fixtfti
entry:
%conv = call i128 @llvm.experimental.constrained.fptosi.i128.f128(fp128 %ld, metadata !"fpexcept.strict")
ret i128 %conv
}
declare i128 @llvm.experimental.constrained.fptosi.i128.f128(fp128, metadata)
define i128 @test_fixtftu(fp128 %ld) {
; CHECK-LABEL: test_fixtftu:
; CHECK: bl __fixunstfti
entry:
%conv = call i128 @llvm.experimental.constrained.fptoui.i128.f128(fp128 %ld, metadata !"fpexcept.strict")
ret i128 %conv
}
declare i128 @llvm.experimental.constrained.fptoui.i128.f128(fp128, metadata)