
Summary: Added a new IRCanonicalizer pass which aims to transform LLVM modules into a canonical form by reordering and renaming instructions while preserving the same semantics. The canonicalizer makes it easier to spot semantic differences when diffing two modules which have undergone different passes. Presentation: https://www.youtube.com/watch?v=c9WMijSOEUg Reviewed by: plotfi Differential Revision: https://reviews.llvm.org/D66029
67 lines
2.5 KiB
C++
67 lines
2.5 KiB
C++
//===-- Utils.cpp - TransformUtils Infrastructure -------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the common initialization infrastructure for the
|
|
// TransformUtils library.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Transforms/Utils.h"
|
|
#include "llvm-c/Initialization.h"
|
|
#include "llvm-c/Transforms/Utils.h"
|
|
#include "llvm/IR/LegacyPassManager.h"
|
|
#include "llvm/InitializePasses.h"
|
|
#include "llvm/PassRegistry.h"
|
|
|
|
using namespace llvm;
|
|
|
|
/// initializeTransformUtils - Initialize all passes in the TransformUtils
|
|
/// library.
|
|
void llvm::initializeTransformUtils(PassRegistry &Registry) {
|
|
initializeAddDiscriminatorsLegacyPassPass(Registry);
|
|
initializeAssumeSimplifyPassLegacyPassPass(Registry);
|
|
initializeBreakCriticalEdgesPass(Registry);
|
|
initializeCanonicalizeAliasesLegacyPassPass(Registry);
|
|
initializeCanonicalizeFreezeInLoopsPass(Registry);
|
|
initializeInstNamerPass(Registry);
|
|
initializeIRCanonicalizerPass(Registry);
|
|
initializeLCSSAWrapperPassPass(Registry);
|
|
initializeLibCallsShrinkWrapLegacyPassPass(Registry);
|
|
initializeLoopSimplifyPass(Registry);
|
|
initializeLowerInvokeLegacyPassPass(Registry);
|
|
initializeLowerSwitchPass(Registry);
|
|
initializeNameAnonGlobalLegacyPassPass(Registry);
|
|
initializePromoteLegacyPassPass(Registry);
|
|
initializeStripNonLineTableDebugInfoPass(Registry);
|
|
initializeUnifyFunctionExitNodesPass(Registry);
|
|
initializeMetaRenamerPass(Registry);
|
|
initializeStripGCRelocatesPass(Registry);
|
|
initializePredicateInfoPrinterLegacyPassPass(Registry);
|
|
initializeInjectTLIMappingsLegacyPass(Registry);
|
|
initializeFixIrreduciblePass(Registry);
|
|
initializeUnifyLoopExitsPass(Registry);
|
|
initializeUniqueInternalLinkageNamesLegacyPassPass(Registry);
|
|
}
|
|
|
|
/// LLVMInitializeTransformUtils - C binding for initializeTransformUtilsPasses.
|
|
void LLVMInitializeTransformUtils(LLVMPassRegistryRef R) {
|
|
initializeTransformUtils(*unwrap(R));
|
|
}
|
|
|
|
void LLVMAddLowerSwitchPass(LLVMPassManagerRef PM) {
|
|
unwrap(PM)->add(createLowerSwitchPass());
|
|
}
|
|
|
|
void LLVMAddPromoteMemoryToRegisterPass(LLVMPassManagerRef PM) {
|
|
unwrap(PM)->add(createPromoteMemoryToRegisterPass());
|
|
}
|
|
|
|
void LLVMAddAddDiscriminatorsPass(LLVMPassManagerRef PM) {
|
|
unwrap(PM)->add(createAddDiscriminatorsPass());
|
|
}
|