
fixes #151764 This fix has two parts first we track all lifetime intrinsics and if they are users of an alloca of a target extention like dx.RawBuffer then we eliminate those memory intrinsics when we visit the alloca. We do step one to allow us to use the Dead Store Elimination Pass. This removes the alloca and simplifies the use of the target extention back to using just the global. That keeps things in a form the DXILBitcodeWriter is expecting. Obviously to pull this off we needed to bring back the legacy pass manager plumbing for the DSE pass and hook it up into the DirectX backend. The net impact of this change is that DML shader pass rate went from 89.72% (4268 successful compilations) to 90.98% (4328 successful compilations).
54 lines
2.4 KiB
C++
54 lines
2.4 KiB
C++
//===-- Scalar.cpp --------------------------------------------------------===//
|
|
//
|
|
// 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 implements common infrastructure for libLLVMScalarOpts.a, which
|
|
// implements several scalar transformations over the LLVM intermediate
|
|
// representation, including the C bindings for that library.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/InitializePasses.h"
|
|
|
|
using namespace llvm;
|
|
|
|
/// initializeScalarOptsPasses - Initialize all passes linked into the
|
|
/// ScalarOpts library.
|
|
void llvm::initializeScalarOpts(PassRegistry &Registry) {
|
|
initializeConstantHoistingLegacyPassPass(Registry);
|
|
initializeDCELegacyPassPass(Registry);
|
|
initializeScalarizerLegacyPassPass(Registry);
|
|
initializeGVNLegacyPassPass(Registry);
|
|
initializeEarlyCSELegacyPassPass(Registry);
|
|
initializeEarlyCSEMemSSALegacyPassPass(Registry);
|
|
initializeFlattenCFGLegacyPassPass(Registry);
|
|
initializeInferAddressSpacesPass(Registry);
|
|
initializeInstSimplifyLegacyPassPass(Registry);
|
|
initializeLegacyLICMPassPass(Registry);
|
|
initializeLoopDataPrefetchLegacyPassPass(Registry);
|
|
initializeLoopStrengthReducePass(Registry);
|
|
initializeLoopTermFoldPass(Registry);
|
|
initializeLoopUnrollPass(Registry);
|
|
initializeLowerAtomicLegacyPassPass(Registry);
|
|
initializeMergeICmpsLegacyPassPass(Registry);
|
|
initializeNaryReassociateLegacyPassPass(Registry);
|
|
initializePartiallyInlineLibCallsLegacyPassPass(Registry);
|
|
initializeDSELegacyPassPass(Registry);
|
|
initializeReassociateLegacyPassPass(Registry);
|
|
initializeScalarizeMaskedMemIntrinLegacyPassPass(Registry);
|
|
initializeSROALegacyPassPass(Registry);
|
|
initializeCFGSimplifyPassPass(Registry);
|
|
initializeStructurizeCFGLegacyPassPass(Registry);
|
|
initializeSinkingLegacyPassPass(Registry);
|
|
initializeTailCallElimPass(Registry);
|
|
initializeSeparateConstOffsetFromGEPLegacyPassPass(Registry);
|
|
initializeSpeculativeExecutionLegacyPassPass(Registry);
|
|
initializeStraightLineStrengthReduceLegacyPassPass(Registry);
|
|
initializePlaceBackedgeSafepointsLegacyPassPass(Registry);
|
|
initializePostInlineEntryExitInstrumenterPass(Registry);
|
|
}
|