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