Skip to content
  1. Apr 13, 2012
  2. Apr 12, 2012
  3. Apr 11, 2012
  4. Apr 10, 2012
  5. Apr 09, 2012
    • Chad Rosier's avatar
      When performing a truncating store, it's possible to rearrange the data · e0e38f61
      Chad Rosier authored
      in-register, such that we can use a single vector store rather then a 
      series of scalar stores.
      
      For func_4_8 the generated code
      
      	vldr	d16, LCPI0_0
      	vmov	d17, r0, r1
      	vadd.i16	d16, d17, d16
      	vmov.u16	r0, d16[3]
      	strb	r0, [r2, #3]
      	vmov.u16	r0, d16[2]
      	strb	r0, [r2, #2]
      	vmov.u16	r0, d16[1]
      	strb	r0, [r2, #1]
      	vmov.u16	r0, d16[0]
      	strb	r0, [r2]
      	bx	lr
      
      becomes
      
      	vldr	d16, LCPI0_0
      	vmov	d17, r0, r1
      	vadd.i16	d16, d17, d16
      	vuzp.8	d16, d17
      	vst1.32	{d16[0]}, [r2, :32]
      	bx	lr
      
      I'm not fond of how this combine pessimizes 2012-03-13-DAGCombineBug.ll,
      but I couldn't think of a way to judiciously apply this combine.
      
      This
      
      	ldrh	r0, [r0, #4]
      	strh	r0, [r1]
      
      becomes
      
      	vldr	d16, [r0]
      	vmov.u16	r0, d16[2]
      	vmov.32	d16[0], r0
      	vuzp.16	d16, d17
      	vst1.32	{d16[0]}, [r1, :32]
      
      PR11158
      rdar://10703339
      
      llvm-svn: 154340
      e0e38f61
    • Chad Rosier's avatar
      Update comments and remove unnecessary isVolatile() check. · 99cbde9e
      Chad Rosier authored
      llvm-svn: 154336
      99cbde9e
Loading