mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
GlobalISel: improve translation fallback for constants.
Returning 0 (NoReg) from getOrCreateVReg leads to unexpected situations later in the translation. It's better to return a valid (if undefined) register and let the rest of the instruction carry on as planned. llvm-svn: 288709
This commit is contained in:
parent
6bb513ad94
commit
3514d3648f
@ -74,7 +74,7 @@ unsigned IRTranslator::getOrCreateVReg(const Value &Val) {
|
||||
if (!TPC->isGlobalISelAbortEnabled()) {
|
||||
MIRBuilder.getMF().getProperties().set(
|
||||
MachineFunctionProperties::Property::FailedISel);
|
||||
return 0;
|
||||
return VReg;
|
||||
}
|
||||
reportTranslationError(Val, "unable to translate constant");
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
; RUN: not llc -O0 -global-isel -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefix=ERROR
|
||||
; RUN: llc -O0 -global-isel -global-isel-abort=0 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefix=FALLBACK
|
||||
; RUN: llc -O0 -global-isel -global-isel-abort=2 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefix=FALLBACK_WITH_REPORT
|
||||
; RUN: llc -O0 -global-isel -global-isel-abort=2 -verify-machineinstrs %s -o %t.out 2> %t.err
|
||||
; RUN: FileCheck %s --check-prefix=FALLBACK-WITH-REPORT-OUT < %t.out
|
||||
; RUN: FileCheck %s --check-prefix=FALLBACK-WITH-REPORT-ERR < %t.err
|
||||
; This file checks that the fallback path to selection dag works.
|
||||
; The test is fragile in the sense that it must be updated to expose
|
||||
; something that fails with global-isel.
|
||||
@ -16,11 +18,22 @@ target triple = "aarch64--"
|
||||
; FALLBACK: ldr q0,
|
||||
; FALLBACK-NEXT: bl __fixunstfti
|
||||
;
|
||||
; FALLBACK_WITH_REPORT: warning: Instruction selection used fallback path for ABIi128
|
||||
; FALLBACK_WITH_REPORT: ldr q0,
|
||||
; FALLBACK_WITH_REPORT-NEXT: bl __fixunstfti
|
||||
; FALLBACK-WITH-REPORT-ERR: warning: Instruction selection used fallback path for ABIi128
|
||||
; FALLBACK-WITH-REPORT-OUT-LABEL: ABIi128:
|
||||
; FALLBACK-WITH-REPORT-OUT: ldr q0,
|
||||
; FALLBACK-WITH-REPORT-OUT-NEXT: bl __fixunstfti
|
||||
define i128 @ABIi128(i128 %arg1) {
|
||||
%farg1 = bitcast i128 %arg1 to fp128
|
||||
%farg1 = bitcast i128 %arg1 to fp128
|
||||
%res = fptoui fp128 %farg1 to i128
|
||||
ret i128 %res
|
||||
}
|
||||
|
||||
; It happens that we don't handle ConstantArray instances yet during
|
||||
; translation. Any other constant would be fine too.
|
||||
|
||||
; FALLBACK-WITH-REPORT-ERR: warning: Instruction selection used fallback path for constant
|
||||
; FALLBACK-WITH-REPORT-OUT-LABEL: constant:
|
||||
; FALLBACK-WITH-REPORT-OUT: fmov d0, #1.0
|
||||
define [1 x double] @constant() {
|
||||
ret [1 x double] [double 1.0]
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user