A number of the power 9 instructions call generate_store_FPRF() to calculate the floating point condition code value. The function generates a lot of Iops. If there are about 6 or instructions in the basic block that use this function, it exhausts the temporary memory.
Created attachment 108093 [details] replace body of generate_store_FPRF with C helper function. replace the generate_store_FPRF function body with a C Helper function.
+#define V128_FRACTION_MASK 0x0000FFFFFFFFFFFFULL /* upper 64-bit fractional mask */ + +ULong generate_C_FPCC_helper( ULong size, ULong src_hi, ULong src ) { + UInt NaN, inf, zero, norm, dnorm, pos; + UInt bit0, bit1, bit2, bit3; * nit: { on its own line, in the house style * Please rename 'size' here to 'irType', because that's what it really is + if ( size == Ity_I16 ) { + frac_part = I16_FRACTION_MASK & src; + exp_mask = I16_EXP_MASK; ... + exp_mask = V128_EXP_MASK; + exp_part = exp_mask & src_hi; + sign_bit = src_hi >> 63; + } Add else { vassert(0); } so as to cause the system to fail if any other value is passed for irType. OK to land with the above points fixed.
patch committed: commit acdeb75d2a58f4f3910ddaf9b2bc2ec74378fa3a