mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
5200dee212
Add a pass to lower is.constant and objectsize intrinsics This pass lowers is.constant and objectsize intrinsics not simplified by earlier constant folding, i.e. if the object given is not constant or if not using the optimized pass chain. The result is recursively simplified and constant conditionals are pruned, so that dead blocks are removed even for -O0. This allows inline asm blocks with operand constraints to work all the time. The new pass replaces the existing lowering in the codegen-prepare pass and fallbacks in SDAG/GlobalISEL and FastISel. The latter now assert on the intrinsics. Differential Revision: https://reviews.llvm.org/D65280 llvm-svn: 374784
42 lines
1.4 KiB
C++
42 lines
1.4 KiB
C++
//===- LowerConstantIntrinsics.h - Lower constant int. pass -*- C++ -*-========//
|
|
//
|
|
// 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
/// \file
|
|
///
|
|
/// The header file for the LowerConstantIntrinsics pass as used by the new pass
|
|
/// manager.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TRANSFORMS_SCALAR_LOWERCONSTANTINTRINSICS_H
|
|
#define LLVM_TRANSFORMS_SCALAR_LOWERCONSTANTINTRINSICS_H
|
|
|
|
#include "llvm/IR/Function.h"
|
|
#include "llvm/IR/PassManager.h"
|
|
|
|
namespace llvm {
|
|
|
|
struct LowerConstantIntrinsicsPass :
|
|
PassInfoMixin<LowerConstantIntrinsicsPass> {
|
|
public:
|
|
explicit LowerConstantIntrinsicsPass() {}
|
|
|
|
/// Run the pass over the function.
|
|
///
|
|
/// This will lower all remaining 'objectsize' and 'is.constant'`
|
|
/// intrinsic calls in this function, even when the argument has no known
|
|
/// size or is not a constant respectively. The resulting constant is
|
|
/// propagated and conditional branches are resolved where possible.
|
|
/// This complements the Instruction Simplification and
|
|
/// Instruction Combination passes of the optimized pass chain.
|
|
PreservedAnalyses run(Function &F, FunctionAnalysisManager &);
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|