Files
llvm-6502/test/CodeGen/ARM
Evan Cheng 8a7186dbc2 Let targets provide hooks that compute known zero and ones for any_extend
and extload's. If they are implemented as zero-extend, or implicitly
zero-extend, then this can enable more demanded bits optimizations. e.g.

define void @foo(i16* %ptr, i32 %a) nounwind {
entry:
  %tmp1 = icmp ult i32 %a, 100
  br i1 %tmp1, label %bb1, label %bb2
bb1:
  %tmp2 = load i16* %ptr, align 2
  br label %bb2
bb2:
  %tmp3 = phi i16 [ 0, %entry ], [ %tmp2, %bb1 ]
  %cmp = icmp ult i16 %tmp3, 24
  br i1 %cmp, label %bb3, label %exit
bb3:
  call void @bar() nounwind
  br label %exit
exit:
  ret void
}

This compiles to the followings before:
        push    {lr}
        mov     r2, #0
        cmp     r1, #99
        bhi     LBB0_2
@ BB#1:                                 @ %bb1
        ldrh    r2, [r0]
LBB0_2:                                 @ %bb2
        uxth    r0, r2
        cmp     r0, #23
        bhi     LBB0_4
@ BB#3:                                 @ %bb3
        bl      _bar
LBB0_4:                                 @ %exit
        pop     {lr}
        bx      lr

The uxth is not needed since ldrh implicitly zero-extend the high bits. With
this change it's eliminated.

rdar://12771555


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169459 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-06 01:28:01 +00:00
..
2012-09-29 21:43:49 +00:00
2012-10-16 07:16:47 +00:00
2012-10-16 07:16:47 +00:00
2012-10-19 08:23:06 +00:00
2012-09-29 21:43:49 +00:00
2010-09-17 21:46:16 +00:00
2012-04-10 03:15:42 +00:00
2012-06-11 08:07:26 +00:00
2012-02-28 02:08:50 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2010-09-02 20:19:24 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-06-15 21:32:12 +00:00
2012-09-29 21:43:49 +00:00
2011-12-19 23:26:44 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2011-11-14 18:03:05 +00:00
2012-09-29 21:43:49 +00:00
2011-11-29 23:09:16 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2010-10-22 22:04:28 +00:00
2011-03-15 01:49:08 +00:00
2011-04-01 03:36:33 +00:00
2011-07-26 20:49:44 +00:00
2010-08-30 23:41:49 +00:00
2010-11-29 22:39:38 +00:00
2012-10-12 22:59:21 +00:00