summaryrefslogtreecommitdiffstats
path: root/llvm/include
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2017-02-08 17:57:20 +0000
committerTim Northover <tnorthover@apple.com>2017-02-08 17:57:20 +0000
commitf19d467ff6c7c14af97b0bdc52f1980488fca0e3 (patch)
treef3756bb377092a26251a082249080b32e7d41ce1 /llvm/include
parent3bceebb0e0644e97e4c0f181c2be5dc1554004cf (diff)
downloadbcm5719-llvm-f19d467ff6c7c14af97b0bdc52f1980488fca0e3.tar.gz
bcm5719-llvm-f19d467ff6c7c14af97b0bdc52f1980488fca0e3.zip
GlobalISel: translate @llvm.va_start intrinsic.
Because we need to preserve the memory access being performed we need a separate instruction to represent this. llvm-svn: 294492
Diffstat (limited to 'llvm/include')
-rw-r--r--llvm/include/llvm/Target/GenericOpcodes.td7
-rw-r--r--llvm/include/llvm/Target/TargetLowering.h5
-rw-r--r--llvm/include/llvm/Target/TargetOpcodes.def3
3 files changed, 15 insertions, 0 deletions
diff --git a/llvm/include/llvm/Target/GenericOpcodes.td b/llvm/include/llvm/Target/GenericOpcodes.td
index d3b2835d1bd..6352a6990f2 100644
--- a/llvm/include/llvm/Target/GenericOpcodes.td
+++ b/llvm/include/llvm/Target/GenericOpcodes.td
@@ -91,6 +91,13 @@ def G_FCONSTANT : Instruction {
let hasSideEffects = 0;
}
+def G_VASTART : Instruction {
+ let OutOperandList = (outs);
+ let InOperandList = (ins type0:$list);
+ let hasSideEffects = 0;
+ let mayStore = 1;
+}
+
//------------------------------------------------------------------------------
// Binary ops.
//------------------------------------------------------------------------------
diff --git a/llvm/include/llvm/Target/TargetLowering.h b/llvm/include/llvm/Target/TargetLowering.h
index bc98673e029..68696763fca 100644
--- a/llvm/include/llvm/Target/TargetLowering.h
+++ b/llvm/include/llvm/Target/TargetLowering.h
@@ -987,6 +987,11 @@ public:
return GatherAllAliasesMaxDepth;
}
+ /// Returns the size of the platform's va_list object.
+ virtual unsigned getVaListSizeInBits(const DataLayout &DL) const {
+ return getPointerTy(DL).getSizeInBits();
+ }
+
/// \brief Get maximum # of store operations permitted for llvm.memset
///
/// This function returns the maximum number of store operations permitted
diff --git a/llvm/include/llvm/Target/TargetOpcodes.def b/llvm/include/llvm/Target/TargetOpcodes.def
index 290e3ff78f0..a0d6a6309dc 100644
--- a/llvm/include/llvm/Target/TargetOpcodes.def
+++ b/llvm/include/llvm/Target/TargetOpcodes.def
@@ -280,6 +280,9 @@ HANDLE_TARGET_OPCODE(G_CONSTANT)
/// Generic floating constant.
HANDLE_TARGET_OPCODE(G_FCONSTANT)
+/// Generic va_start instruction. Stores to its one pointer operand.
+HANDLE_TARGET_OPCODE(G_VASTART)
+
// Generic sign extend
HANDLE_TARGET_OPCODE(G_SEXT)
OpenPOWER on IntegriCloud