craig.topper created this revision. craig.topper added reviewers: HsiangKai, kito-cheng, arcbbb, khchen. Herald added subscribers: achieveartificialintelligence, StephenFan, vkmr, frasercrmck, evandro, luismarques, apazos, sameer.abuasal, s.egerton, Jim, benna, psnobl, jocewei, PkmX, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, shiva0217, niosHD, sabuasal, simoncook, johnrusso, rbar, asb. craig.topper requested review of this revision. Herald added a subscriber: MaskRay. Herald added a project: clang.
It was being used to control the nothrow attribute on the builtins. The nothrow attribute is for C++ exceptions. Even if the vector builtins have side effects in IR, that's different than the nothrow attribute. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D112028 Files: clang/include/clang/Basic/riscv_vector.td clang/utils/TableGen/RISCVVEmitter.cpp
Index: clang/utils/TableGen/RISCVVEmitter.cpp =================================================================== --- clang/utils/TableGen/RISCVVEmitter.cpp +++ clang/utils/TableGen/RISCVVEmitter.cpp @@ -153,7 +153,6 @@ std::string Name; // Builtin name std::string MangledName; std::string IRName; - bool HasSideEffects; bool IsMask; bool HasMaskedOffOperand; bool HasVL; @@ -171,9 +170,9 @@ public: RVVIntrinsic(StringRef Name, StringRef Suffix, StringRef MangledName, - StringRef MangledSuffix, StringRef IRName, bool HasSideEffects, - bool IsMask, bool HasMaskedOffOperand, bool HasVL, - bool HasPolicy, bool HasNoMaskedOverloaded, bool HasAutoDef, + StringRef MangledSuffix, StringRef IRName, bool IsMask, + bool HasMaskedOffOperand, bool HasVL, bool HasPolicy, + bool HasNoMaskedOverloaded, bool HasAutoDef, StringRef ManualCodegen, const RVVTypes &Types, const std::vector<int64_t> &IntrinsicTypes, StringRef RequiredExtension, unsigned NF); @@ -181,7 +180,6 @@ StringRef getName() const { return Name; } StringRef getMangledName() const { return MangledName; } - bool hasSideEffects() const { return HasSideEffects; } bool hasMaskedOffOperand() const { return HasMaskedOffOperand; } bool hasVL() const { return HasVL; } bool hasPolicy() const { return HasPolicy; } @@ -759,16 +757,16 @@ //===----------------------------------------------------------------------===// RVVIntrinsic::RVVIntrinsic(StringRef NewName, StringRef Suffix, StringRef NewMangledName, StringRef MangledSuffix, - StringRef IRName, bool HasSideEffects, bool IsMask, + StringRef IRName, bool IsMask, bool HasMaskedOffOperand, bool HasVL, bool HasPolicy, bool HasNoMaskedOverloaded, bool HasAutoDef, StringRef ManualCodegen, const RVVTypes &OutInTypes, const std::vector<int64_t> &NewIntrinsicTypes, StringRef RequiredExtension, unsigned NF) - : IRName(IRName), HasSideEffects(HasSideEffects), IsMask(IsMask), - HasMaskedOffOperand(HasMaskedOffOperand), HasVL(HasVL), - HasPolicy(HasPolicy), HasNoMaskedOverloaded(HasNoMaskedOverloaded), - HasAutoDef(HasAutoDef), ManualCodegen(ManualCodegen.str()), NF(NF) { + : IRName(IRName), IsMask(IsMask), HasMaskedOffOperand(HasMaskedOffOperand), + HasVL(HasVL), HasPolicy(HasPolicy), + HasNoMaskedOverloaded(HasNoMaskedOverloaded), HasAutoDef(HasAutoDef), + ManualCodegen(ManualCodegen.str()), NF(NF) { // Init Name and MangledName Name = NewName.str(); @@ -1024,11 +1022,7 @@ OS << "#endif\n"; for (auto &Def : Defs) { OS << "RISCVV_BUILTIN(__builtin_rvv_" << Def->getName() << ",\"" - << Def->getBuiltinTypeStr() << "\", "; - if (!Def->hasSideEffects()) - OS << "\"n\")\n"; - else - OS << "\"\")\n"; + << Def->getBuiltinTypeStr() << "\", \"n\")\n"; } OS << "#undef RISCVV_BUILTIN\n"; } @@ -1099,7 +1093,6 @@ bool HasVL = R->getValueAsBit("HasVL"); bool HasPolicy = R->getValueAsBit("HasPolicy"); bool HasNoMaskedOverloaded = R->getValueAsBit("HasNoMaskedOverloaded"); - bool HasSideEffects = R->getValueAsBit("HasSideEffects"); std::vector<int64_t> Log2LMULList = R->getValueAsListOfInts("Log2LMUL"); StringRef ManualCodegen = R->getValueAsString("ManualCodegen"); StringRef ManualCodegenMask = R->getValueAsString("ManualCodegenMask"); @@ -1171,17 +1164,17 @@ // Create a non-mask intrinsic Out.push_back(std::make_unique<RVVIntrinsic>( Name, SuffixStr, MangledName, MangledSuffixStr, IRName, - HasSideEffects, /*IsMask=*/false, /*HasMaskedOffOperand=*/false, - HasVL, HasPolicy, HasNoMaskedOverloaded, HasAutoDef, ManualCodegen, - Types.getValue(), IntrinsicTypes, RequiredExtension, NF)); + /*IsMask=*/false, /*HasMaskedOffOperand=*/false, HasVL, HasPolicy, + HasNoMaskedOverloaded, HasAutoDef, ManualCodegen, Types.getValue(), + IntrinsicTypes, RequiredExtension, NF)); if (HasMask) { // Create a mask intrinsic Optional<RVVTypes> MaskTypes = computeTypes(I, Log2LMUL, NF, ProtoMaskSeq); Out.push_back(std::make_unique<RVVIntrinsic>( Name, SuffixStr, MangledName, MangledSuffixStr, IRNameMask, - HasSideEffects, /*IsMask=*/true, HasMaskedOffOperand, HasVL, - HasPolicy, HasNoMaskedOverloaded, HasAutoDef, ManualCodegenMask, + /*IsMask=*/true, HasMaskedOffOperand, HasVL, HasPolicy, + HasNoMaskedOverloaded, HasAutoDef, ManualCodegenMask, MaskTypes.getValue(), IntrinsicTypes, RequiredExtension, NF)); } } // end for Log2LMULList Index: clang/include/clang/Basic/riscv_vector.td =================================================================== --- clang/include/clang/Basic/riscv_vector.td +++ clang/include/clang/Basic/riscv_vector.td @@ -191,9 +191,6 @@ // All masked operations support overloading api. bit HasNoMaskedOverloaded = true; - // Reads or writes "memory" or has other side-effects. - bit HasSideEffects = false; - // This builtin is valid for the given Log2LMULs. list<int> Log2LMUL = [0, 1, 2, 3, -1, -2, -3]; @@ -1475,7 +1472,6 @@ // 6.1. vsetvli/vsetvl instructions let HasVL = false, HasMask = false, - HasSideEffects = true, HasPolicy = false, Log2LMUL = [0], ManualCodegen = [{IntrinsicTypes = {ResultType};}] in // Set XLEN type
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits