1 //===- subzero/crosstest/insertelement.h - Helper for PNaCl workaround. ---===// 2 // 3 // The Subzero Code Generator 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // Helper function to work around a potential stack overflow issue. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef INSERTELEMENT_H 15 #define INSERTELEMENT_H 16 17 // Helper function to perform the insertelement bitcode instruction. The PNaCl 18 // ABI simplifications transform insertelement/extractelement instructions with 19 // a non-constant index into something involving alloca. This can cause a stack 20 // overflow if the alloca is inside a loop. 21 template <typename VectorType, typename ElementType> 22 void __attribute__((noinline)) setElement(VectorType & Value,size_t Index,ElementType Element)23setElement(VectorType &Value, size_t Index, ElementType Element) { 24 Value[Index] = Element; 25 } 26 27 #endif // INSERTELEMENT_H 28