mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-13 22:58:50 +00:00
It's not safe to fold (fptrunc (sqrt (fpext x))) to (sqrtf x) if there is another use of sqrt. rdar://9763193
llvm-svn: 135058
This commit is contained in:
parent
9b9604762e
commit
ba4a50f10c
@ -1216,7 +1216,8 @@ Instruction *InstCombiner::visitFPTrunc(FPTruncInst &CI) {
|
||||
CallInst *Call = dyn_cast<CallInst>(CI.getOperand(0));
|
||||
if (Call && Call->getCalledFunction() &&
|
||||
Call->getCalledFunction()->getName() == "sqrt" &&
|
||||
Call->getNumArgOperands() == 1) {
|
||||
Call->getNumArgOperands() == 1 &&
|
||||
Call->hasOneUse()) {
|
||||
CastInst *Arg = dyn_cast<CastInst>(Call->getArgOperand(0));
|
||||
if (Arg && Arg->getOpcode() == Instruction::FPExt &&
|
||||
CI.getType()->isFloatTy() &&
|
||||
|
@ -14,8 +14,6 @@ entry:
|
||||
ret float %conv1
|
||||
}
|
||||
|
||||
declare double @sqrt(double)
|
||||
|
||||
; PR8096
|
||||
define float @test2(float %x) nounwind readnone ssp {
|
||||
entry:
|
||||
@ -30,3 +28,22 @@ entry:
|
||||
; CHECK: ret float
|
||||
ret float %conv1
|
||||
}
|
||||
|
||||
; rdar://9763193
|
||||
; Can't fold (fptrunc (sqrt (fpext x))) -> (sqrtf x) since there is another
|
||||
; use of sqrt result.
|
||||
define float @test3(float* %v) nounwind uwtable ssp {
|
||||
entry:
|
||||
; CHECK: @test3
|
||||
; CHECK: sqrt(
|
||||
; CHECK-NOT: sqrtf(
|
||||
; CHECK: fptrunc
|
||||
%call34 = call double @sqrt(double undef) nounwind readnone
|
||||
%call36 = call i32 (double)* @foo(double %call34) nounwind
|
||||
%conv38 = fptrunc double %call34 to float
|
||||
ret float %conv38
|
||||
}
|
||||
|
||||
declare i32 @foo(double)
|
||||
|
||||
declare double @sqrt(double) readnone
|
||||
|
@ -338,9 +338,11 @@ static int AssembleInput(const char *ProgName) {
|
||||
formatted_raw_ostream FOS(Out->os());
|
||||
OwningPtr<MCStreamer> Str;
|
||||
|
||||
#if 0
|
||||
const TargetLoweringObjectFile &TLOF =
|
||||
TM->getTargetLowering()->getObjFileLowering();
|
||||
const_cast<TargetLoweringObjectFile&>(TLOF).Initialize(Ctx, *TM);
|
||||
#endif
|
||||
|
||||
OwningPtr<MCInstrInfo> MCII(TheTarget->createMCInstrInfo());
|
||||
OwningPtr<MCSubtargetInfo>
|
||||
|
Loading…
Reference in New Issue
Block a user