diff options
author | Craig Topper <craig.topper@intel.com> | 2018-03-02 18:16:51 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2018-03-02 18:16:51 +0000 |
commit | 18799f4c07fdef192ab8b42b9e954baad97a23f5 (patch) | |
tree | 55117e77977b6a3809f87f4435ee8a3775ae7439 /llvm/lib/IR/Instructions.cpp | |
parent | 20cf67c233beab21cccbdc23d8b35397fc6cb321 (diff) | |
download | bcm5719-llvm-18799f4c07fdef192ab8b42b9e954baad97a23f5.tar.gz bcm5719-llvm-18799f4c07fdef192ab8b42b9e954baad97a23f5.zip |
[InstCombine] Allow fptrunc (fpext X)) to be reduced to a single fpext/ftrunc
If we are only truncating bits from the extend we should be able to just use a smaller extend.
If we are truncating more than the extend we should be able to just use a fptrunc since the presense of the fpextend shouldn't affect rounding.
Differential Revision: https://reviews.llvm.org/D43970
llvm-svn: 326595
Diffstat (limited to 'llvm/lib/IR/Instructions.cpp')
-rw-r--r-- | llvm/lib/IR/Instructions.cpp | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/llvm/lib/IR/Instructions.cpp b/llvm/lib/IR/Instructions.cpp index 51ecbdc0d87..21a0042d26e 100644 --- a/llvm/lib/IR/Instructions.cpp +++ b/llvm/lib/IR/Instructions.cpp @@ -2173,7 +2173,7 @@ unsigned CastInst::isEliminableCastPair( { 99,99,99, 0, 0,99,99, 0, 0,99,99, 4, 0}, // UIToFP +- firstOp { 99,99,99, 0, 0,99,99, 0, 0,99,99, 4, 0}, // SIToFP | { 99,99,99, 0, 0,99,99, 0, 0,99,99, 4, 0}, // FPTrunc | - { 99,99,99, 2, 2,99,99,10, 2,99,99, 4, 0}, // FPExt | + { 99,99,99, 2, 2,99,99, 8, 2,99,99, 4, 0}, // FPExt | { 1, 0, 0,99,99, 0, 0,99,99,99, 7, 3, 0}, // PtrToInt | { 99,99,99,99,99,99,99,99,99,11,99,15, 0}, // IntToPtr | { 5, 5, 5, 6, 6, 5, 5, 6, 6,16, 5, 1,14}, // BitCast | @@ -2267,12 +2267,6 @@ unsigned CastInst::isEliminableCastPair( case 9: // zext, sext -> zext, because sext can't sign extend after zext return Instruction::ZExt; - case 10: - // fpext followed by ftrunc is allowed if the bit size returned to is - // the same as the original, in which case its just a bitcast - if (SrcTy == DstTy) - return Instruction::BitCast; - return 0; // If the types are not the same we can't eliminate it. case 11: { // inttoptr, ptrtoint -> bitcast if SrcSize<=PtrSize and SrcSize==DstSize if (!MidIntPtrTy) |