mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-02 08:26:39 +00:00
PR10077: fix fast-isel of extractvalue of aggregate constants.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132676 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -841,8 +841,10 @@ FastISel::SelectExtractValue(const User *U) {
|
|||||||
DenseMap<const Value *, unsigned>::iterator I = FuncInfo.ValueMap.find(Op0);
|
DenseMap<const Value *, unsigned>::iterator I = FuncInfo.ValueMap.find(Op0);
|
||||||
if (I != FuncInfo.ValueMap.end())
|
if (I != FuncInfo.ValueMap.end())
|
||||||
ResultReg = I->second;
|
ResultReg = I->second;
|
||||||
else
|
else if (isa<Instruction>(Op0))
|
||||||
ResultReg = FuncInfo.InitializeRegForValue(Op0);
|
ResultReg = FuncInfo.InitializeRegForValue(Op0);
|
||||||
|
else
|
||||||
|
return false; // fast-isel can't handle aggregate constants at the moment
|
||||||
|
|
||||||
// Get the actual result register, which is an offset from the base register.
|
// Get the actual result register, which is an offset from the base register.
|
||||||
unsigned VTIndex = ComputeLinearIndex(AggTy, EVI->idx_begin(), EVI->idx_end());
|
unsigned VTIndex = ComputeLinearIndex(AggTy, EVI->idx_begin(), EVI->idx_end());
|
||||||
|
11
test/CodeGen/X86/fast-isel-agg-constant.ll
Normal file
11
test/CodeGen/X86/fast-isel-agg-constant.ll
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
; RUN: llc < %s -march=x86-64 -O0 | FileCheck %s
|
||||||
|
; Make sure fast-isel doesn't screw up aggregate constants.
|
||||||
|
; (Failing out is okay, as long as we don't miscompile.)
|
||||||
|
|
||||||
|
%bar = type { i32 }
|
||||||
|
|
||||||
|
define i32 @foo() {
|
||||||
|
%tmp = extractvalue %bar { i32 3 }, 0
|
||||||
|
ret i32 %tmp
|
||||||
|
; CHECK: movl $3, %eax
|
||||||
|
}
|
Reference in New Issue
Block a user