|  | //===- subzero/crosstest/insertelement.h - Helper for PNaCl workaround. ---===// | 
|  | // | 
|  | //                        The Subzero Code Generator | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // Helper function to work around a potential stack overflow issue. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef INSERTELEMENT_H | 
|  | #define INSERTELEMENT_H | 
|  |  | 
|  | // Helper function to perform the insertelement bitcode instruction.  The PNaCl | 
|  | // ABI simplifications transform insertelement/extractelement instructions with | 
|  | // a non-constant index into something involving alloca.  This can cause a stack | 
|  | // overflow if the alloca is inside a loop. | 
|  | template <typename VectorType, typename ElementType> | 
|  | void __attribute__((noinline)) | 
|  | setElement(VectorType &Value, size_t Index, ElementType Element) { | 
|  | Value[Index] = Element; | 
|  | } | 
|  |  | 
|  | #endif // INSERTELEMENT_H |