mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-02 16:56:50 +00:00
When CodeGen'ing unoptimized code, there may be unfolded constant expressions
in global initializers. Instead of aborting, attempt to fold them on the spot. If folding succeeds, emit the folded expression instead. This fixes PR6255. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95583 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
baf0c67988
commit
618f17702d
@ -25,6 +25,7 @@
|
||||
#include "llvm/CodeGen/MachineJumpTableInfo.h"
|
||||
#include "llvm/CodeGen/MachineLoopInfo.h"
|
||||
#include "llvm/CodeGen/MachineModuleInfo.h"
|
||||
#include "llvm/Analysis/ConstantFolding.h"
|
||||
#include "llvm/Analysis/DebugInfo.h"
|
||||
#include "llvm/MC/MCContext.h"
|
||||
#include "llvm/MC/MCExpr.h"
|
||||
@ -887,15 +888,16 @@ static const MCExpr *LowerConstant(const Constant *CV, AsmPrinter &AP) {
|
||||
}
|
||||
|
||||
switch (CE->getOpcode()) {
|
||||
case Instruction::ZExt:
|
||||
case Instruction::SExt:
|
||||
case Instruction::FPTrunc:
|
||||
case Instruction::FPExt:
|
||||
case Instruction::UIToFP:
|
||||
case Instruction::SIToFP:
|
||||
case Instruction::FPToUI:
|
||||
case Instruction::FPToSI:
|
||||
default: llvm_unreachable("FIXME: Don't support this constant cast expr");
|
||||
default:
|
||||
// If the code isn't optimized, there may be outstanding folding
|
||||
// opportunities. Attempt to fold the expression using TargetData as a
|
||||
// last resort before giving up.
|
||||
if (Constant *C = ConstantFoldConstantExpression(CE, AP.TM.getTargetData()))
|
||||
return LowerConstant(C, AP);
|
||||
#ifndef NDEBUG
|
||||
CE->dump();
|
||||
#endif
|
||||
llvm_unreachable("FIXME: Don't support this constant expr");
|
||||
case Instruction::GetElementPtr: {
|
||||
const TargetData &TD = *AP.TM.getTargetData();
|
||||
// Generate a symbolic expression for the byte address
|
||||
|
@ -6,3 +6,9 @@
|
||||
; CHECK: .quad r&4294967295
|
||||
|
||||
@r = global %union.x { i64 ptrtoint (%union.x* @r to i64) }, align 4
|
||||
|
||||
; CHECK: .globl x
|
||||
; CHECK: x:
|
||||
; CHECK: .quad 3
|
||||
|
||||
@x = global i64 mul (i64 3, i64 ptrtoint (i2* getelementptr (i2* null, i64 1) to i64))
|
||||
|
Loading…
Reference in New Issue
Block a user