diff options
author | Nikita Popov <npopov@redhat.com> | 2023-11-14 09:25:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-14 09:25:14 +0100 |
commit | 56c1d30183e156365f7057f5945b2bc48fdb32e7 (patch) | |
tree | 0d0886c0e43529c72a31c6f26a30d3e004528132 /llvm/lib | |
parent | 9cb1673fa5d267148ac81ee31b37f1d2f7c0f2b8 (diff) | |
download | llvm-56c1d30183e156365f7057f5945b2bc48fdb32e7.zip llvm-56c1d30183e156365f7057f5945b2bc48fdb32e7.tar.gz llvm-56c1d30183e156365f7057f5945b2bc48fdb32e7.tar.bz2 |
[IR] Remove support for lshr/ashr constant expressions (#71955)
Remove support for the lshr and ashr constant expressions. All places
creating them have been removed beforehand, so this just removes the
APIs and uses of these constant expressions in tests.
This is part of
https://discourse.llvm.org/t/rfc-remove-most-constant-expressions/63179.
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/AsmParser/LLParser.cpp | 12 | ||||
-rw-r--r-- | llvm/lib/IR/ConstantFold.cpp | 23 | ||||
-rw-r--r-- | llvm/lib/IR/Constants.cpp | 14 | ||||
-rw-r--r-- | llvm/lib/IR/Core.cpp | 10 |
4 files changed, 6 insertions, 53 deletions
diff --git a/llvm/lib/AsmParser/LLParser.cpp b/llvm/lib/AsmParser/LLParser.cpp index 9940bfb..f9df70f 100644 --- a/llvm/lib/AsmParser/LLParser.cpp +++ b/llvm/lib/AsmParser/LLParser.cpp @@ -3852,6 +3852,10 @@ bool LLParser::parseValID(ValID &ID, PerFunctionState *PFS, Type *ExpectedTy) { return error(ID.Loc, "and constexprs are no longer supported"); case lltok::kw_or: return error(ID.Loc, "or constexprs are no longer supported"); + case lltok::kw_lshr: + return error(ID.Loc, "lshr constexprs are no longer supported"); + case lltok::kw_ashr: + return error(ID.Loc, "ashr constexprs are no longer supported"); case lltok::kw_fneg: return error(ID.Loc, "fneg constexprs are no longer supported"); case lltok::kw_select: @@ -3910,12 +3914,9 @@ bool LLParser::parseValID(ValID &ID, PerFunctionState *PFS, Type *ExpectedTy) { case lltok::kw_sub: case lltok::kw_mul: case lltok::kw_shl: - case lltok::kw_lshr: - case lltok::kw_ashr: case lltok::kw_xor: { bool NUW = false; bool NSW = false; - bool Exact = false; unsigned Opc = Lex.getUIntVal(); Constant *Val0, *Val1; Lex.Lex(); @@ -3928,10 +3929,6 @@ bool LLParser::parseValID(ValID &ID, PerFunctionState *PFS, Type *ExpectedTy) { if (EatIfPresent(lltok::kw_nuw)) NUW = true; } - } else if (Opc == Instruction::SDiv || Opc == Instruction::UDiv || - Opc == Instruction::LShr || Opc == Instruction::AShr) { - if (EatIfPresent(lltok::kw_exact)) - Exact = true; } if (parseToken(lltok::lparen, "expected '(' in binary constantexpr") || parseGlobalTypeAndValue(Val0) || @@ -3948,7 +3945,6 @@ bool LLParser::parseValID(ValID &ID, PerFunctionState *PFS, Type *ExpectedTy) { unsigned Flags = 0; if (NUW) Flags |= OverflowingBinaryOperator::NoUnsignedWrap; if (NSW) Flags |= OverflowingBinaryOperator::NoSignedWrap; - if (Exact) Flags |= PossiblyExactOperator::IsExact; ID.ConstantVal = ConstantExpr::get(Opc, Val0, Val1, Flags); ID.Kind = ValID::t_Constant; return false; diff --git a/llvm/lib/IR/ConstantFold.cpp b/llvm/lib/IR/ConstantFold.cpp index 0358f99..25f7ac2 100644 --- a/llvm/lib/IR/ConstantFold.cpp +++ b/llvm/lib/IR/ConstantFold.cpp @@ -155,29 +155,6 @@ static Constant *ExtractConstantBytes(Constant *C, unsigned ByteStart, switch (CE->getOpcode()) { default: return nullptr; - case Instruction::LShr: { - ConstantInt *Amt = dyn_cast<ConstantInt>(CE->getOperand(1)); - if (!Amt) - return nullptr; - APInt ShAmt = Amt->getValue(); - // Cannot analyze non-byte shifts. - if ((ShAmt & 7) != 0) - return nullptr; - ShAmt.lshrInPlace(3); - - // If the extract is known to be all zeros, return zero. - if (ShAmt.uge(CSize - ByteStart)) - return Constant::getNullValue( - IntegerType::get(CE->getContext(), ByteSize * 8)); - // If the extract is known to be fully in the input, extract it. - if (ShAmt.ule(CSize - (ByteStart + ByteSize))) - return ExtractConstantBytes(CE->getOperand(0), - ByteStart + ShAmt.getZExtValue(), ByteSize); - - // TODO: Handle the 'partially zero' case. - return nullptr; - } - case Instruction::Shl: { ConstantInt *Amt = dyn_cast<ConstantInt>(CE->getOperand(1)); if (!Amt) diff --git a/llvm/lib/IR/Constants.cpp b/llvm/lib/IR/Constants.cpp index aab624b..bc55d5b 100644 --- a/llvm/lib/IR/Constants.cpp +++ b/llvm/lib/IR/Constants.cpp @@ -2160,13 +2160,13 @@ bool ConstantExpr::isSupportedBinOp(unsigned Opcode) { case Instruction::FRem: case Instruction::And: case Instruction::Or: + case Instruction::LShr: + case Instruction::AShr: return false; case Instruction::Add: case Instruction::Sub: case Instruction::Mul: case Instruction::Shl: - case Instruction::LShr: - case Instruction::AShr: case Instruction::Xor: return true; default: @@ -2482,16 +2482,6 @@ Constant *ConstantExpr::getShl(Constant *C1, Constant *C2, return get(Instruction::Shl, C1, C2, Flags); } -Constant *ConstantExpr::getLShr(Constant *C1, Constant *C2, bool isExact) { - return get(Instruction::LShr, C1, C2, - isExact ? PossiblyExactOperator::IsExact : 0); -} - -Constant *ConstantExpr::getAShr(Constant *C1, Constant *C2, bool isExact) { - return get(Instruction::AShr, C1, C2, - isExact ? PossiblyExactOperator::IsExact : 0); -} - Constant *ConstantExpr::getExactLogBase2(Constant *C) { Type *Ty = C->getType(); const APInt *IVal; diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp index 004b0e8..f838b05 100644 --- a/llvm/lib/IR/Core.cpp +++ b/llvm/lib/IR/Core.cpp @@ -1712,16 +1712,6 @@ LLVMValueRef LLVMConstShl(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) { unwrap<Constant>(RHSConstant))); } -LLVMValueRef LLVMConstLShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) { - return wrap(ConstantExpr::getLShr(unwrap<Constant>(LHSConstant), - unwrap<Constant>(RHSConstant))); -} - -LLVMValueRef LLVMConstAShr(LLVMValueRef LHSConstant, LLVMValueRef RHSConstant) { - return wrap(ConstantExpr::getAShr(unwrap<Constant>(LHSConstant), - unwrap<Constant>(RHSConstant))); -} - LLVMValueRef LLVMConstGEP2(LLVMTypeRef Ty, LLVMValueRef ConstantVal, LLVMValueRef *ConstantIndices, unsigned NumIndices) { ArrayRef<Constant *> IdxList(unwrap<Constant>(ConstantIndices, NumIndices), |