[llvm-commits] [llvm] r163592 - in /llvm/trunk: include/llvm/InitializePasses.h include/llvm/LinkAllPasses.h include/llvm/Transforms/IPO.h lib/Transforms/Utils/MetaRenamer.cpp lib/Transforms/Utils/Utils.cpp test/Transforms/MetaRenamer/ test/Trans
Chandler Carruth
chandlerc at google.com
Mon Sep 10 20:08:44 PDT 2012
Any chance you're up for teaching bug point to run this automatically at
the end? ;]
On Sep 10, 2012 7:49 PM, "Alex Rosenberg" <alexr at leftfield.org> wrote:
> Author: alexr
> Date: Mon Sep 10 21:46:18 2012
> New Revision: 163592
>
> URL: http://llvm.org/viewvc/llvm-project?rev=163592&view=rev
> Log:
> Add a pass that renames everything with metasyntatic names. This works
> well after using bugpoint to reduce the confusion presented by the original
> names, which no longer mean what they used to.
>
> Added:
> llvm/trunk/lib/Transforms/Utils/MetaRenamer.cpp
> llvm/trunk/test/Transforms/MetaRenamer/
> llvm/trunk/test/Transforms/MetaRenamer/lit.local.cfg
> llvm/trunk/test/Transforms/MetaRenamer/metarenamer.ll
> Modified:
> llvm/trunk/include/llvm/InitializePasses.h
> llvm/trunk/include/llvm/LinkAllPasses.h
> llvm/trunk/include/llvm/Transforms/IPO.h
> llvm/trunk/lib/Transforms/Utils/Utils.cpp
>
> Modified: llvm/trunk/include/llvm/InitializePasses.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/InitializePasses.h?rev=163592&r1=163591&r2=163592&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/InitializePasses.h (original)
> +++ llvm/trunk/include/llvm/InitializePasses.h Mon Sep 10 21:46:18 2012
> @@ -178,6 +178,7 @@
> void initializeMemCpyOptPass(PassRegistry&);
> void initializeMemDepPrinterPass(PassRegistry&);
> void initializeMemoryDependenceAnalysisPass(PassRegistry&);
> +void initializeMetaRenamerPass(PassRegistry&);
> void initializeMergeFunctionsPass(PassRegistry&);
> void initializeModuleDebugInfoPrinterPass(PassRegistry&);
> void initializeNoAAPass(PassRegistry&);
>
> Modified: llvm/trunk/include/llvm/LinkAllPasses.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/LinkAllPasses.h?rev=163592&r1=163591&r2=163592&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/LinkAllPasses.h (original)
> +++ llvm/trunk/include/llvm/LinkAllPasses.h Mon Sep 10 21:46:18 2012
> @@ -141,6 +141,7 @@
> (void) llvm::createLoopDeletionPass();
> (void) llvm::createPostDomTree();
> (void) llvm::createInstructionNamerPass();
> + (void) llvm::createMetaRenamerPass();
> (void) llvm::createFunctionAttrsPass();
> (void) llvm::createMergeFunctionsPass();
> (void) llvm::createPrintModulePass(0);
>
> Modified: llvm/trunk/include/llvm/Transforms/IPO.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/IPO.h?rev=163592&r1=163591&r2=163592&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/IPO.h (original)
> +++ llvm/trunk/include/llvm/Transforms/IPO.h Mon Sep 10 21:46:18 2012
> @@ -192,6 +192,11 @@
> /// createPartialInliningPass - This pass inlines parts of functions.
> ///
> ModulePass *createPartialInliningPass();
> +
>
> +//===----------------------------------------------------------------------===//
> +// createMetaRenamerPass - Rename everything with metasyntatic names.
> +//
> +ModulePass *createMetaRenamerPass();
>
> } // End llvm namespace
>
>
> Added: llvm/trunk/lib/Transforms/Utils/MetaRenamer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/MetaRenamer.cpp?rev=163592&view=auto
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/MetaRenamer.cpp (added)
> +++ llvm/trunk/lib/Transforms/Utils/MetaRenamer.cpp Mon Sep 10 21:46:18
> 2012
> @@ -0,0 +1,132 @@
> +//===- MetaRenamer.cpp - Rename everything with metasyntatic names
> --------===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
>
> +//===----------------------------------------------------------------------===//
> +//
> +// This pass renames everything with metasyntatic names. The intent is to
> use
> +// this pass after bugpoint reduction to conceal the nature of the
> original
> +// program.
> +//
>
> +//===----------------------------------------------------------------------===//
> +
> +#include "llvm/Transforms/IPO.h"
> +#include "llvm/Function.h"
> +#include "llvm/Module.h"
> +#include "llvm/Pass.h"
> +#include "llvm/Type.h"
> +#include "llvm/TypeFinder.h"
> +#include "llvm/DerivedTypes.h"
> +#include "llvm/ADT/STLExtras.h"
> +#include "llvm/ADT/SmallString.h"
> +
> +using namespace llvm;
> +
> +namespace {
> +
> + // This PRNG is from the ISO C spec. It is intentionally simple and
> + // unsuitable for cryptographic use. We're just looking for enough
> + // variety to surprise and delight users.
> + struct PRNG {
> + unsigned long next;
> +
> + void srand(unsigned int seed) {
> + next = seed;
> + }
> +
> + int rand(void) {
> + next = next * 1103515245 + 12345;
> + return (unsigned int)(next / 65536) % 32768;
> + }
> + };
> +
> + struct MetaRenamer : public ModulePass {
> + static char ID; // Pass identification, replacement for typeid
> + MetaRenamer() : ModulePass(ID) {
> + initializeMetaRenamerPass(*PassRegistry::getPassRegistry());
> + }
> +
> + void getAnalysisUsage(AnalysisUsage &AU) const {
> + AU.setPreservesAll();
> + }
> +
> + bool runOnModule(Module &M) {
> + static const char *metaNames[] = {
> + // See http://en.wikipedia.org/wiki/Metasyntactic_variable
> + "foo", "bar", "baz", "quux", "barney", "snork", "zot", "blam",
> "hoge",
> + "wibble", "wobble", "widget", "wombat", "ham", "eggs", "pluto",
> "spam"
> + };
> +
> + // Seed our PRNG with simple additive sum of ModuleID. We're
> looking to
> + // simply avoid always having the same function names, and we need
> to
> + // remain deterministic.
> + unsigned int randSeed = 0;
> + for (std::string::const_iterator I =
> M.getModuleIdentifier().begin(),
> + E = M.getModuleIdentifier().end(); I != E; ++I)
> + randSeed += *I;
> +
> + PRNG prng;
> + prng.srand(randSeed);
> +
> + // Rename all aliases
> + for (Module::alias_iterator AI = M.alias_begin(), AE =
> M.alias_end();
> + AI != AE; ++AI)
> + AI->setName("alias");
> +
> + // Rename all global variables
> + for (Module::global_iterator GI = M.global_begin(), GE =
> M.global_end();
> + GI != GE; ++GI)
> + GI->setName("global");
> +
> + // Rename all struct types
> + TypeFinder StructTypes;
> + StructTypes.run(M, true);
> + for (unsigned i = 0, e = StructTypes.size(); i != e; ++i) {
> + StructType *STy = StructTypes[i];
> + if (STy->isLiteral() || STy->getName().empty()) continue;
> +
> + SmallString<128> NameStorage;
> + STy->setName((Twine("struct.") + metaNames[prng.rand() %
> +
> array_lengthof(metaNames)]).toStringRef(NameStorage));
> + }
> +
> + // Rename all functions
> + for (Module::iterator FI = M.begin(), FE = M.end();
> + FI != FE; ++FI) {
> + FI->setName(metaNames[prng.rand() % array_lengthof(metaNames)]);
> + runOnFunction(*FI);
> + }
> + return true;
> + }
> +
> + bool runOnFunction(Function &F) {
> + for (Function::arg_iterator AI = F.arg_begin(), AE = F.arg_end();
> + AI != AE; ++AI)
> + if (!AI->getType()->isVoidTy())
> + AI->setName("arg");
> +
> + for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
> {
> + BB->setName("bb");
> +
> + for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E;
> ++I)
> + if (!I->getType()->isVoidTy())
> + I->setName("tmp");
> + }
> + return true;
> + }
> + };
> +}
> +
> +char MetaRenamer::ID = 0;
> +INITIALIZE_PASS(MetaRenamer, "metarenamer",
> + "Assign new names to everything", false, false)
>
> +//===----------------------------------------------------------------------===//
> +//
> +// MetaRenamer - Rename everything with metasyntactic names.
> +//
> +ModulePass *llvm::createMetaRenamerPass() {
> + return new MetaRenamer();
> +}
>
> Modified: llvm/trunk/lib/Transforms/Utils/Utils.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/Utils.cpp?rev=163592&r1=163591&r2=163592&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/Utils.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/Utils.cpp Mon Sep 10 21:46:18 2012
> @@ -29,6 +29,7 @@
> initializePromotePassPass(Registry);
> initializeUnifyFunctionExitNodesPass(Registry);
> initializeInstSimplifierPass(Registry);
> + initializeMetaRenamerPass(Registry);
> }
>
> /// LLVMInitializeTransformUtils - C binding for
> initializeTransformUtilsPasses.
>
> Added: llvm/trunk/test/Transforms/MetaRenamer/lit.local.cfg
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/MetaRenamer/lit.local.cfg?rev=163592&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/MetaRenamer/lit.local.cfg (added)
> +++ llvm/trunk/test/Transforms/MetaRenamer/lit.local.cfg Mon Sep 10
> 21:46:18 2012
> @@ -0,0 +1 @@
> +config.suffixes = ['.ll', '.c', '.cpp']
>
> Added: llvm/trunk/test/Transforms/MetaRenamer/metarenamer.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/MetaRenamer/metarenamer.ll?rev=163592&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/MetaRenamer/metarenamer.ll (added)
> +++ llvm/trunk/test/Transforms/MetaRenamer/metarenamer.ll Mon Sep 10
> 21:46:18 2012
> @@ -0,0 +1,96 @@
> +; RUN: opt %s -metarenamer -S | FileCheck %s
> +
> +; CHECK: target triple {{.*}}
> +; CHECK-NOT: {{^x*}}xxx{{^x*}}
> +; CHECK: ret i32 6
> +
> +target triple = "x86_64-pc-linux-gnu"
> +
> +%struct.bar_xxx = type { i32, double }
> +%struct.foo_xxx = type { i32, float, %struct.bar_xxx }
> +
> + at func_5_xxx.static_local_3_xxx = internal global i32 3, align 4
> + at global_3_xxx = common global i32 0, align 4
> +
> + at func_7_xxx = alias weak i32 (...)* @aliased_func_7_xxx
> +
> +declare i32 @aliased_func_7_xxx(...)
> +
> +define i32 @func_3_xxx() nounwind uwtable ssp {
> + ret i32 3
> +}
> +
> +define void @func_4_xxx(%struct.foo_xxx* sret %agg.result) nounwind
> uwtable ssp {
> + %1 = alloca %struct.foo_xxx, align 8
> + %2 = getelementptr inbounds %struct.foo_xxx* %1, i32 0, i32 0
> + store i32 1, i32* %2, align 4
> + %3 = getelementptr inbounds %struct.foo_xxx* %1, i32 0, i32 1
> + store float 2.000000e+00, float* %3, align 4
> + %4 = getelementptr inbounds %struct.foo_xxx* %1, i32 0, i32 2
> + %5 = getelementptr inbounds %struct.bar_xxx* %4, i32 0, i32 0
> + store i32 3, i32* %5, align 4
> + %6 = getelementptr inbounds %struct.bar_xxx* %4, i32 0, i32 1
> + store double 4.000000e+00, double* %6, align 8
> + %7 = bitcast %struct.foo_xxx* %agg.result to i8*
> + %8 = bitcast %struct.foo_xxx* %1 to i8*
> + call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 24, i32 8, i1
> false)
> + ret void
> +}
> +
> +declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture,
> i64, i32, i1) nounwind
> +
> +define i32 @func_5_xxx(i32 %arg_1_xxx, i32 %arg_2_xxx, i32 %arg_3_xxx,
> i32 %arg_4_xxx) nounwind uwtable ssp {
> + %1 = alloca i32, align 4
> + %2 = alloca i32, align 4
> + %3 = alloca i32, align 4
> + %4 = alloca i32, align 4
> + %local_1_xxx = alloca i32, align 4
> + %local_2_xxx = alloca i32, align 4
> + %i = alloca i32, align 4
> + store i32 %arg_1_xxx, i32* %1, align 4
> + store i32 %arg_2_xxx, i32* %2, align 4
> + store i32 %arg_3_xxx, i32* %3, align 4
> + store i32 %arg_4_xxx, i32* %4, align 4
> + store i32 1, i32* %local_1_xxx, align 4
> + store i32 2, i32* %local_2_xxx, align 4
> + store i32 0, i32* %i, align 4
> + br label %5
> +
> +; <label>:5 ; preds = %9, %0
> + %6 = load i32* %i, align 4
> + %7 = icmp slt i32 %6, 10
> + br i1 %7, label %8, label %12
> +
> +; <label>:8 ; preds = %5
> + br label %9
> +
> +; <label>:9 ; preds = %8
> + %10 = load i32* %i, align 4
> + %11 = add nsw i32 %10, 1
> + store i32 %11, i32* %i, align 4
> + br label %5
> +
> +; <label>:12 ; preds = %5
> + %13 = load i32* %local_1_xxx, align 4
> + %14 = load i32* %1, align 4
> + %15 = add nsw i32 %13, %14
> + %16 = load i32* %local_2_xxx, align 4
> + %17 = add nsw i32 %15, %16
> + %18 = load i32* %2, align 4
> + %19 = add nsw i32 %17, %18
> + %20 = load i32* @func_5_xxx.static_local_3_xxx, align 4
> + %21 = add nsw i32 %19, %20
> + %22 = load i32* %3, align 4
> + %23 = add nsw i32 %21, %22
> + %24 = load i32* %4, align 4
> + %25 = add nsw i32 %23, %24
> + ret i32 %25
> +}
> +
> +define i32 @varargs_func_6_xxx(i32 %arg_1_xxx, i32 %arg_2_xxx, ...)
> nounwind uwtable ssp {
> + %1 = alloca i32, align 4
> + %2 = alloca i32, align 4
> + store i32 %arg_1_xxx, i32* %1, align 4
> + store i32 %arg_2_xxx, i32* %2, align 4
> + ret i32 6
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120910/7721f181/attachment.html>
More information about the llvm-commits
mailing list