[PATCH] ARM: Windows on ARM Hazard recognition support

Saleem Abdulrasool abdulras at fb.com
Fri Apr 4 23:10:38 PDT 2014


  Yes, the Constant Pool Island injection is one case where the instruction was split up even if I bundled them.  Its quite possible that I did not get everything correct.  The resultant MI would look something like this:

      BUNDLE
        * %R0<def> = t2MOVi16 <ga:@"global">[TF=1], pred:14, pred:%noreg
        * %R0<def,tied1> = t2MOVTi16 %R0<tied0>, <ga:@"global">[TF=2], pred:14, pred:%noreg

  This would then get split up as such:

      %R0<def> = t2MOVi16 <ga:@"global">[TF=1], pred:14, pred:%noreg
      t2B <BB#3>, pred:14, pred:%noreg

      CONSTPOOL_ENTRY 1, <cp#1>, 4

      %R0<def,tied1> = t2MOVTi16 %R0<tied0>, <ga:@"global">[TF=2], pred:14, pred:%noreg

  While this is perfectly fine on other targets, on Windows, this must remain bundled as the relocation is applied to the consecutive 32-bits.  The result is that the relocation would corrupt the instruction stream.

  Unfortunately, I do not have a test case readily available which can demonstrate this.

http://llvm-reviews.chandlerc.com/D3254



More information about the llvm-commits mailing list