LLVM  14.0.0git
AutoUpgrade.h
Go to the documentation of this file.
1 //===- AutoUpgrade.h - AutoUpgrade Helpers ----------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // These functions are implemented by lib/IR/AutoUpgrade.cpp.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef LLVM_IR_AUTOUPGRADE_H
14 #define LLVM_IR_AUTOUPGRADE_H
15 
16 #include "llvm/ADT/StringRef.h"
17 
18 namespace llvm {
19  class AttrBuilder;
20  class CallInst;
21  class Constant;
22  class Function;
23  class Instruction;
24  class MDNode;
25  class Module;
26  class GlobalVariable;
27  class Type;
28  class Value;
29 
30  /// This is a more granular function that simply checks an intrinsic function
31  /// for upgrading, and returns true if it requires upgrading. It may return
32  /// null in NewFn if the all calls to the original intrinsic function
33  /// should be transformed to non-function-call instructions.
34  bool UpgradeIntrinsicFunction(Function *F, Function *&NewFn);
35 
36  /// This is the complement to the above, replacing a specific call to an
37  /// intrinsic function with a call to the specified new function.
38  void UpgradeIntrinsicCall(CallInst *CI, Function *NewFn);
39 
40  // This upgrades the comment for objc retain release markers in inline asm
41  // calls
42  void UpgradeInlineAsmString(std::string *AsmStr);
43 
44  /// This is an auto-upgrade hook for any old intrinsic function syntaxes
45  /// which need to have both the function updated as well as all calls updated
46  /// to the new function. This should only be run in a post-processing fashion
47  /// so that it can update all calls to the old function.
48  void UpgradeCallsToIntrinsic(Function* F);
49 
50  /// This checks for global variables which should be upgraded. It it requires
51  /// upgrading, returns a pointer to the upgraded variable.
52  GlobalVariable *UpgradeGlobalVariable(GlobalVariable *GV);
53 
54  /// This checks for module flags which should be upgraded. It returns true if
55  /// module is modified.
57 
58  /// Convert calls to ARC runtime functions to intrinsic calls and upgrade the
59  /// old retain release marker to new module flag format.
60  void UpgradeARCRuntime(Module &M);
61 
63 
64  /// Correct any IR that is relying on old function attribute behavior.
65  void UpgradeFunctionAttributes(Function &F);
66 
67  /// If the given TBAA tag uses the scalar TBAA format, create a new node
68  /// corresponding to the upgrade to the struct-path aware TBAA format.
69  /// Otherwise return the \p TBAANode itself.
70  MDNode *UpgradeTBAANode(MDNode &TBAANode);
71 
72  /// This is an auto-upgrade for bitcast between pointers with different
73  /// address spaces: the instruction is replaced by a pair ptrtoint+inttoptr.
74  Instruction *UpgradeBitCastInst(unsigned Opc, Value *V, Type *DestTy,
75  Instruction *&Temp);
76 
77  /// This is an auto-upgrade for bitcast constant expression between pointers
78  /// with different address spaces: the instruction is replaced by a pair
79  /// ptrtoint+inttoptr.
80  Value *UpgradeBitCastExpr(unsigned Opc, Constant *C, Type *DestTy);
81 
82  /// Check the debug info version number, if it is out-dated, drop the debug
83  /// info. Return true if module is modified.
84  bool UpgradeDebugInfo(Module &M);
85 
86  /// Check whether a string looks like an old loop attachment tag.
88  return Name.startswith("llvm.vectorizer.");
89  }
90 
91  /// Upgrade the loop attachment metadata node.
92  MDNode *upgradeInstructionLoopAttachment(MDNode &N);
93 
94  /// Upgrade the datalayout string by adding a section for address space
95  /// pointers.
96  std::string UpgradeDataLayoutString(StringRef DL, StringRef Triple);
97 
98  /// Upgrade attributes that changed format or kind.
99  void UpgradeAttributes(AttrBuilder &B);
100 
101 } // End llvm namespace
102 
103 #endif
llvm::upgradeInstructionLoopAttachment
MDNode * upgradeInstructionLoopAttachment(MDNode &N)
Upgrade the loop attachment metadata node.
Definition: AutoUpgrade.cpp:4430
llvm::UpgradeCallsToIntrinsic
void UpgradeCallsToIntrinsic(Function *F)
This is an auto-upgrade hook for any old intrinsic function syntaxes which need to have both the func...
Definition: AutoUpgrade.cpp:3943
llvm
This file implements support for optimizing divisions by a constant.
Definition: AllocatorList.h:23
llvm::UpgradeIntrinsicFunction
bool UpgradeIntrinsicFunction(Function *F, Function *&NewFn)
This is a more granular function that simply checks an intrinsic function for upgrading,...
Definition: AutoUpgrade.cpp:1002
M
We currently emits eax Perhaps this is what we really should generate is Is imull three or four cycles eax eax The current instruction priority is based on pattern complexity The former is more complex because it folds a load so the latter will not be emitted Perhaps we should use AddedComplexity to give LEA32r a higher priority We should always try to match LEA first since the LEA matching code does some estimate to determine whether the match is profitable if we care more about code then imull is better It s two bytes shorter than movl leal On a Pentium M
Definition: README.txt:252
llvm::UpgradeDebugInfo
bool UpgradeDebugInfo(Module &M)
Check the debug info version number, if it is out-dated, drop the debug info.
Definition: AutoUpgrade.cpp:4027
StringRef.h
llvm::UpgradeAttributes
void UpgradeAttributes(AttrBuilder &B)
Upgrade attributes that changed format or kind.
Definition: AutoUpgrade.cpp:4468
llvm::mayBeOldLoopAttachmentTag
bool mayBeOldLoopAttachmentTag(StringRef Name)
Check whether a string looks like an old loop attachment tag.
Definition: AutoUpgrade.h:87
F
#define F(x, y, z)
Definition: MD5.cpp:56
llvm::UpgradeARCRuntime
void UpgradeARCRuntime(Module &M)
Convert calls to ARC runtime functions to intrinsic calls and upgrade the old retain release marker t...
Definition: AutoUpgrade.cpp:4077
llvm::UpgradeBitCastInst
Instruction * UpgradeBitCastInst(unsigned Opc, Value *V, Type *DestTy, Instruction *&Temp)
This is an auto-upgrade for bitcast between pointers with different address spaces: the instruction i...
Definition: AutoUpgrade.cpp:3983
llvm::ISD::Constant
@ Constant
Definition: ISDOpcodes.h:76
C
(vector float) vec_cmpeq(*A, *B) C
Definition: README_ALTIVEC.txt:86
B
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
llvm::UpgradeTBAANode
MDNode * UpgradeTBAANode(MDNode &TBAANode)
If the given TBAA tag uses the scalar TBAA format, create a new node corresponding to the upgrade to ...
Definition: AutoUpgrade.cpp:3961
llvm::UpgradeSectionAttributes
void UpgradeSectionAttributes(Module &M)
Definition: AutoUpgrade.cpp:4306
llvm::UpgradeFunctionAttributes
void UpgradeFunctionAttributes(Function &F)
Correct any IR that is relying on old function attribute behavior.
Definition: AutoUpgrade.cpp:4363
TemplateParamKind::Type
@ Type
llvm::ReplayInlineScope::Function
@ Function
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:58
DL
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
Definition: AArch64SLSHardening.cpp:76
Module
Machine Check Debug Module
Definition: MachineCheckDebugify.cpp:122
llvm::UpgradeBitCastExpr
Value * UpgradeBitCastExpr(unsigned Opc, Constant *C, Type *DestTy)
This is an auto-upgrade for bitcast constant expression between pointers with different address space...
Definition: AutoUpgrade.cpp:4005
llvm::GraphProgram::Name
Name
Definition: GraphWriter.h:52
llvm::TargetStackID::Value
Value
Definition: TargetFrameLowering.h:27
llvm::UpgradeIntrinsicCall
void UpgradeIntrinsicCall(CallInst *CI, Function *NewFn)
This is the complement to the above, replacing a specific call to an intrinsic function with a call t...
Definition: AutoUpgrade.cpp:1808
llvm::UpgradeModuleFlags
bool UpgradeModuleFlags(Module &M)
This checks for module flags which should be upgraded.
Definition: AutoUpgrade.cpp:4198
N
#define N
llvm::UpgradeInlineAsmString
void UpgradeInlineAsmString(std::string *AsmStr)
Upgrade comment in call to inline asm that represents an objc retain release marker.
Definition: AutoUpgrade.cpp:1797
llvm::UpgradeGlobalVariable
GlobalVariable * UpgradeGlobalVariable(GlobalVariable *GV)
This checks for global variables which should be upgraded.
Definition: AutoUpgrade.cpp:1015
llvm::UpgradeDataLayoutString
std::string UpgradeDataLayoutString(StringRef DL, StringRef Triple)
Upgrade the datalayout string by adding a section for address space pointers.
Definition: AutoUpgrade.cpp:4446