diff options
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp | 44 | 
1 files changed, 21 insertions, 23 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp index 33f217659c01..8df4a4529f47 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp @@ -157,7 +157,7 @@ Instruction *InstCombinerImpl::PromoteCastOfAllocation(BitCastInst &CI,      Amt = Builder.CreateAdd(Amt, Off);    } -  AllocaInst *New = Builder.CreateAlloca(CastElTy, Amt); +  AllocaInst *New = Builder.CreateAlloca(CastElTy, AI.getAddressSpace(), Amt);    New->setAlignment(AI.getAlign());    New->takeName(&AI);    New->setUsedWithInAlloca(AI.isUsedWithInAlloca()); @@ -965,13 +965,13 @@ Instruction *InstCombinerImpl::visitTrunc(TruncInst &Trunc) {    if (match(Src, m_VScale(DL))) {      if (Trunc.getFunction() &&          Trunc.getFunction()->hasFnAttribute(Attribute::VScaleRange)) { -      unsigned MaxVScale = Trunc.getFunction() -                               ->getFnAttribute(Attribute::VScaleRange) -                               .getVScaleRangeArgs() -                               .second; -      if (MaxVScale > 0 && Log2_32(MaxVScale) < DestWidth) { -        Value *VScale = Builder.CreateVScale(ConstantInt::get(DestTy, 1)); -        return replaceInstUsesWith(Trunc, VScale); +      Attribute Attr = +          Trunc.getFunction()->getFnAttribute(Attribute::VScaleRange); +      if (Optional<unsigned> MaxVScale = Attr.getVScaleRangeMax()) { +        if (Log2_32(MaxVScale.getValue()) < DestWidth) { +          Value *VScale = Builder.CreateVScale(ConstantInt::get(DestTy, 1)); +          return replaceInstUsesWith(Trunc, VScale); +        }        }      }    } @@ -1337,14 +1337,13 @@ Instruction *InstCombinerImpl::visitZExt(ZExtInst &CI) {    if (match(Src, m_VScale(DL))) {      if (CI.getFunction() &&          CI.getFunction()->hasFnAttribute(Attribute::VScaleRange)) { -      unsigned MaxVScale = CI.getFunction() -                               ->getFnAttribute(Attribute::VScaleRange) -                               .getVScaleRangeArgs() -                               .second; -      unsigned TypeWidth = Src->getType()->getScalarSizeInBits(); -      if (MaxVScale > 0 && Log2_32(MaxVScale) < TypeWidth) { -        Value *VScale = Builder.CreateVScale(ConstantInt::get(DestTy, 1)); -        return replaceInstUsesWith(CI, VScale); +      Attribute Attr = CI.getFunction()->getFnAttribute(Attribute::VScaleRange); +      if (Optional<unsigned> MaxVScale = Attr.getVScaleRangeMax()) { +        unsigned TypeWidth = Src->getType()->getScalarSizeInBits(); +        if (Log2_32(MaxVScale.getValue()) < TypeWidth) { +          Value *VScale = Builder.CreateVScale(ConstantInt::get(DestTy, 1)); +          return replaceInstUsesWith(CI, VScale); +        }        }      }    } @@ -1608,13 +1607,12 @@ Instruction *InstCombinerImpl::visitSExt(SExtInst &CI) {    if (match(Src, m_VScale(DL))) {      if (CI.getFunction() &&          CI.getFunction()->hasFnAttribute(Attribute::VScaleRange)) { -      unsigned MaxVScale = CI.getFunction() -                               ->getFnAttribute(Attribute::VScaleRange) -                               .getVScaleRangeArgs() -                               .second; -      if (MaxVScale > 0 && Log2_32(MaxVScale) < (SrcBitSize - 1)) { -        Value *VScale = Builder.CreateVScale(ConstantInt::get(DestTy, 1)); -        return replaceInstUsesWith(CI, VScale); +      Attribute Attr = CI.getFunction()->getFnAttribute(Attribute::VScaleRange); +      if (Optional<unsigned> MaxVScale = Attr.getVScaleRangeMax()) { +        if (Log2_32(MaxVScale.getValue()) < (SrcBitSize - 1)) { +          Value *VScale = Builder.CreateVScale(ConstantInt::get(DestTy, 1)); +          return replaceInstUsesWith(CI, VScale); +        }        }      }    }  | 
