this is not a fix, you might as well say, always do -O0 and you can close 99% of a lot of optimization bugs Sun
On Fri, Feb 24, 2012 at 3:56 PM, Gang Yu <yugang...@gmail.com> wrote: > Hi, > > Could a gatekeeper please help review the fix for > bug953(http://bugs.open64.net/show_bug.cgi?id=953)? > > Cut-down case please have a look at the attachment: > > http://bugs.open64.net/attachment.cgi?id=512 > > openCC -S bug953.cpp -fpic -m32 -O2 > > ### Assertion failure at line 4678 of > /fc/home/yug/open64/osprey/be/cg/lra.cxx: > ### Compiler Error in file bug953.cpp during Local Register Allocation > phase: > ### LRA: Unable to spill TN:170 (cl:1) in BB:1, GRA grant:3 > openCC INTERNAL ERROR: > /fc/home/yug/target/x86_64_dbg/lib/gcc-lib/x86_64-open64-linux/5.0/be > returned non-zero status 1 > > Analysis: > > Dump of the failed bb before the LRA is: > > [ 762, 0] TN154 :- ld32 GTN4(%rsp) (sym:bufSize+0) ; WN id:23 bufSize+0x0 > [ 762, 0] TN156 :- ld32 GTN4(%rsp) (sym:imageSize+0) ; WN id:27 > imageSize+0x0 > [ 0, 0] TN159 :- zero32 ; > [ 759, 1] TN149 :- ld32 GTN4(%rsp) (sym:buffer+0) ; WN id:24 buffer+0x0 > [ 763, 1] TN164 :- ldc32 (0x1) ; > [ 761, 1] TN152 :- ldc32 (0x12345678) ; > [ 759, 2] TN150 :- ldc32 (0x2) ; > [ 762, 3] TN157 :- lea32 TN154 (0xffffffffffffffe0) ; > [ 762, 5] TN155 TN158 :- div32 TN156 TN159 TN157 ; > [ 763, 8] :- store8 TN164 TN149 (0x8) ; WN id:29 > [ 761, 8] :- store32 TN152 TN149 (0x2) ; WN id:26 > [ 759, 8] :- store16 TN150 TN149 (0x0) ; WN id:25 > [ 762,23] TN33(%rflags) :- test32 TN158 TN158 ; > [ 762,24] TN161 :- setne TN33(%rflags) ; > [ 762,25] TN160 :- movzbl TN161 ; > [ 762,26] TN162 :- leax32 TN160 TN155 (0x1) (0x0) ; > [ 762,28] TN163 :- lea32 TN162 (0x1) ; > [ 762,30] :- store16 TN163 TN149 (0x6) ; WN id:28 > [ 764,30] :- store32 TN154 GTN4(%rsp) (0x4) ; WN id:31 > [ 764,30] :- store32 TN149 GTN4(%rsp) (0x0) ; WN id:30 > [ 764,31] :- call (sym:_ZN7factory14checksumPacketEPNS_10rbu_packetEj+0) ; > WN > > while before the IGLS_Schedule_Region, we can get > > [ 759, 0] TN149 :- ld32 GTN4(%rsp) (sym:buffer+0) ; WN id:24 buffer+0x0 > [ 759, 0] TN150 :- ldc32 (0x2) ; > [ 759, 0] :- store16 TN150 TN149 (0x0) ; WN id:25 > [ 761, 0] TN152 :- ldc32 (0x12345678) ; > [ 761, 0] :- store32 TN152 TN149 (0x2) ; WN id:26 > [ 762, 0] TN154 :- ld32 GTN4(%rsp) (sym:bufSize+0) ; WN id:23 bufSize+0x0 > [ 762, 0] TN156 :- ld32 GTN4(%rsp) (sym:imageSize+0) ; WN id:27 > imageSize+0x0 > [ 762, 0] TN157 :- lea32 TN154 (0xffffffffffffffe0) ; > [ 0, 0] TN159 :- zero32 ; > [ 762, 0] TN155 TN158 :- div32 TN156 TN159 TN157 ; > [ 762, 0] TN33(%rflags) :- test32 TN158 TN158 ; > [ 762, 0] TN161 :- setne TN33(%rflags) ; > [ 762, 0] TN160 :- movzbl TN161 ; > [ 762, 0] TN162 :- leax32 TN160 TN155 (0x1) (0x0) ; > [ 762, 0] TN163 :- lea32 TN162 (0x1) ; > [ 762, 0] :- store16 TN163 TN149 (0x6) ; WN id:28 > [ 763, 0] TN164 :- ldc32 (0x1) ; > [ 763, 0] :- store8 TN164 TN149 (0x8) ; WN id:29 > [ 764, 0] :- store32 TN149 GTN4(%rsp) (0x0) ; WN id:30 > [ 764, 0] :- store32 TN154 GTN4(%rsp) (0x4) ; WN id:31 > [ 764, 0] :- call (sym:_ZN7factory14checksumPacketEPNS_10rbu_packetEj+0) ; > WN > > For the scheduling consideration, this is good since constants and loads TNs > are lifted to the head , dependency between adjacent registers are reduced. > However, this increase the register pressures and under m32, fpic , the > physical registers are very limited (EBX used as GOT indexing dedicate > register) which cause the final TN170 unable to get a physical register. > > Suggested patch: > > disable IGLS_scheduling under m32 , PIC environment. > > index 9e644f8..a3c978a 100644 > --- a/osprey/be/cg/cg.cxx > +++ b/osprey/be/cg/cg.cxx > @@ -1505,7 +1505,14 @@ extern void Generate_Return_Address(void); > GRA_LIVE_Rename_TNs(); > } > #if !defined(TARG_PPC32) // PPC IGLS_Schedule_Region bugs > +#ifdef TARG_X8664 > + // open64.net bug953. disable IGLS_Schedule_Region under > + // -m32,-fpic environment. > + if (!(Is_Target_32bit() && Gen_PIC_Shared)) > + IGLS_Schedule_Region (TRUE /* before register allocation */); > +#else > IGLS_Schedule_Region (TRUE /* before register allocation */); > +#endif > #ifdef TARG_X8664 > Examine_Loop_Info("after prescheduling", TRUE); > void Counter_Merge (char*); > > TIA for review. > > Regards > Gang > > ------------------------------------------------------------------------------ > Virtualization & Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Open64-devel mailing list > Open64-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/open64-devel > ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel