LLVM 22.0.0git
Macros | Functions
WebAssemblyFixFunctionBitcasts.cpp File Reference

Fix bitcasted functions. More...

#include "WebAssembly.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Operator.h"
#include "llvm/Pass.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"

Go to the source code of this file.

Macros

#define  DEBUG_TYPE   "wasm-fix-function-bitcasts"

Functions

  INITIALIZE_PASS (FixFunctionBitcasts, DEBUG_TYPE, "Fix mismatching bitcasts for WebAssembly", false, false) ModulePass *llvm
static void  findUses (Value *V, Function &F, SmallVectorImpl< std::pair< CallBase *, Function * > > &Uses)

Detailed Description

Fix bitcasted functions.

WebAssembly requires caller and callee signatures to match, however in LLVM, some amount of slop is vaguely permitted. Detect mismatch by looking for bitcasts of functions and rewrite them to use wrapper functions instead.

This doesn't catch all cases, such as when a function's address is taken in one place and casted in another, but it works for many common cases.

Note that LLVM already optimizes away function bitcasts in common cases by dropping arguments as needed, so this pass only ends up getting used in less common cases.

Definition in file WebAssemblyFixFunctionBitcasts.cpp.

Macro Definition Documentation

◆  DEBUG_TYPE

#define DEBUG_TYPE   "wasm-fix-function-bitcasts"

Definition at line 36 of file WebAssemblyFixFunctionBitcasts.cpp.

Function Documentation

◆  createWrapper()

Function * createWrapper ( Function * F,
FunctionType * Ty )
static

Definition at line 110 of file WebAssemblyFixFunctionBitcasts.cpp.

References Call, llvm::BasicBlock::Create(), llvm::Function::Create(), llvm::dbgs(), DL, F, llvm::PoisonValue::get(), llvm::BasicBlock::getDataLayout(), llvm::Value::getType(), llvm::CastInst::isBitOrNoopPointerCastable(), llvm::Type::isStructTy(), llvm::Type::isVoidTy(), LLVM_DEBUG, llvm::GlobalValue::PrivateLinkage, and Wrapper.

◆  findUses()

void findUses ( Value * V,
Function & F,
SmallVectorImpl< std::pair< CallBase *, Function * > > & Uses )
static

Definition at line 67 of file WebAssemblyFixFunctionBitcasts.cpp.

References A(), llvm::dyn_cast(), F, findUses(), llvm::Value::users(), and Uses.

Referenced by findUses().

◆  INITIALIZE_PASS()

INITIALIZE_PASS ( FixFunctionBitcasts ,
"Fix mismatching bitcasts for WebAssembly" ,
false ,
false  )

Definition at line 58 of file WebAssemblyFixFunctionBitcasts.cpp.

References llvm::createWebAssemblyFixFunctionBitcasts(), and DEBUG_TYPE.

◆  shouldFixMainFunction()

bool shouldFixMainFunction ( FunctionType * FuncTy,
FunctionType * MainTy )
static

Definition at line 214 of file WebAssemblyFixFunctionBitcasts.cpp.


Generated on for LLVM by doxygen 1.14.0

AltStyle によって変換されたページ (->オリジナル) /