[llvm] 6f9e743 - [Metarenamer] Introduce option to only change inst names

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 30 18:30:49 PDT 2023


Isn't this what the instnamer pass was for?

~Craig


On Fri, Jun 30, 2023 at 8:13 AM Anna Thomas via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

>
> Author: Anna Thomas
> Date: 2023-06-30T11:13:15-04:00
> New Revision: 6f9e743b91ad6ac1f333ce6e3efae44e137b54bb
>
> URL:
> https://github.com/llvm/llvm-project/commit/6f9e743b91ad6ac1f333ce6e3efae44e137b54bb
> DIFF:
> https://github.com/llvm/llvm-project/commit/6f9e743b91ad6ac1f333ce6e3efae44e137b54bb.diff
>
> LOG: [Metarenamer] Introduce option to only change inst names
>
> This is useful when needing to modify IR and test some optimizations on
> them, while keeping BB names and function names intact. If
> the IR uses ordered number naming (%1, %2, %3 etc), then we cannot just
> remove or reorder specific instructions since the verifier expects the
> numbers to be in order.
>
> Added:
>     llvm/test/Transforms/MetaRenamer/only-inst.ll
>
> Modified:
>     llvm/lib/Transforms/Utils/MetaRenamer.cpp
>
> Removed:
>
>
>
>
> ################################################################################
> diff  --git a/llvm/lib/Transforms/Utils/MetaRenamer.cpp
> b/llvm/lib/Transforms/Utils/MetaRenamer.cpp
> index 06ccbf888aa300..4053e78c604e64 100644
> --- a/llvm/lib/Transforms/Utils/MetaRenamer.cpp
> +++ b/llvm/lib/Transforms/Utils/MetaRenamer.cpp
> @@ -26,6 +26,7 @@
>  #include "llvm/IR/GlobalAlias.h"
>  #include "llvm/IR/GlobalVariable.h"
>  #include "llvm/IR/Instruction.h"
> +#include "llvm/IR/InstIterator.h"
>  #include "llvm/IR/Module.h"
>  #include "llvm/IR/PassManager.h"
>  #include "llvm/IR/Type.h"
> @@ -59,6 +60,11 @@ static cl::opt<std::string> RenameExcludeStructPrefixes(
>               "by a comma"),
>      cl::Hidden);
>
> +static cl::opt<bool>
> +    RenameOnlyInst("rename-only-inst", cl::init(false),
> +                   cl::desc("only rename the instructions in the
> function"),
> +                   cl::Hidden);
> +
>  static const char *const metaNames[] = {
>    // See http://en.wikipedia.org/wiki/Metasyntactic_variable
>    "foo", "bar", "baz", "quux", "barney", "snork", "zot", "blam", "hoge",
> @@ -102,6 +108,12 @@ parseExcludedPrefixes(StringRef PrefixesStr,
>    }
>  }
>
> +void MetaRenameOnlyInstructions(Function &F) {
> +  for (auto &I : instructions(F))
> +    if (!I.getType()->isVoidTy())
> +      I.setName(I.getOpcodeName());
> +}
> +
>  void MetaRename(Function &F) {
>    for (Argument &Arg : F.args())
>      if (!Arg.getType()->isVoidTy())
> @@ -142,6 +154,26 @@ void MetaRename(Module &M,
>                    [&Name](auto &Prefix) { return Name.startswith(Prefix);
> });
>    };
>
> +  // Leave library functions alone because their presence or absence could
> +  // affect the behavior of other passes.
> +  auto ExcludeLibFuncs = [&](Function &F) {
> +    LibFunc Tmp;
> +    StringRef Name = F.getName();
> +    return Name.startswith("llvm.") || (!Name.empty() && Name[0] == 1) ||
> +           GetTLI(F).getLibFunc(F, Tmp) ||
> +           IsNameExcluded(Name, ExcludedFuncPrefixes);
> +  };
> +
> +  if (RenameOnlyInst) {
> +    // Rename all functions
> +    for (auto &F : M) {
> +      if (ExcludeLibFuncs(F))
> +        continue;
> +      MetaRenameOnlyInstructions(F);
> +    }
> +    return;
> +  }
> +
>    // Rename all aliases
>    for (GlobalAlias &GA : M.aliases()) {
>      StringRef Name = GA.getName();
> @@ -178,18 +210,12 @@ void MetaRename(Module &M,
>
>    // Rename all functions
>    for (auto &F : M) {
> -    StringRef Name = F.getName();
> -    LibFunc Tmp;
> -    // Leave library functions alone because their presence or absence
> could
> -    // affect the behavior of other passes.
> -    if (Name.startswith("llvm.") || (!Name.empty() && Name[0] == 1) ||
> -        GetTLI(F).getLibFunc(F, Tmp) ||
> -        IsNameExcluded(Name, ExcludedFuncPrefixes))
> +    if (ExcludeLibFuncs(F))
>        continue;
>
>      // Leave @main alone. The output of -metarenamer might be passed to
>      // lli for execution and the latter needs a main entry point.
> -    if (Name != "main")
> +    if (F.getName() != "main")
>        F.setName(renamer.newName());
>
>      MetaRename(F);
>
> diff  --git a/llvm/test/Transforms/MetaRenamer/only-inst.ll
> b/llvm/test/Transforms/MetaRenamer/only-inst.ll
> new file mode 100644
> index 00000000000000..8df7e1a0bc5db4
> --- /dev/null
> +++ b/llvm/test/Transforms/MetaRenamer/only-inst.ll
> @@ -0,0 +1,30 @@
> +; RUN: opt -passes=metarenamer -rename-only-inst=1 -S < %s | FileCheck %s
> +target triple = "x86_64-pc-linux-gnu"
> +
> +; CHECK: %struct.foo_xxx = type { i32, float, %struct.bar_xxx }
> +; CHECK: %struct.bar_xxx = type { i32, double }
> +%struct.bar_xxx = type { i32, double }
> +%struct.foo_xxx = type { i32, float, %struct.bar_xxx }
> +
> +; CHECK: @global_3_xxx = common global
> + at global_3_xxx = common global i32 0, align 4
> +
> +; CHECK-LABEL: func_4_xxx
> +; CHECK-NOT: %1
> +; CHECK-NOT: %2
> +; CHECK-NOT: %3
> +; CHECK-NOT: %4
> +define void @func_4_xxx(ptr sret(%struct.foo_xxx) %agg.result) nounwind
> uwtable ssp {
> +  %1 = alloca %struct.foo_xxx, align 8
> +  store i32 1, ptr %1, align 4
> +  %2 = getelementptr inbounds %struct.foo_xxx, ptr %1, i32 0, i32 1
> +  store float 2.000000e+00, ptr %2, align 4
> +  %3 = getelementptr inbounds %struct.foo_xxx, ptr %1, i32 0, i32 2
> +  store i32 3, ptr %3, align 4
> +  %4 = getelementptr inbounds %struct.bar_xxx, ptr %3, i32 0, i32 1
> +  store double 4.000000e+00, ptr %4, align 8
> +  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %agg.result, ptr align 8
> %1, i64 24, i1 false)
> +  ret void
> +}
> +
> +declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture, i64,
> i1) nounwind
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230630/bb6d343f/attachment.html>


More information about the llvm-commits mailing list