1; RUN: llc -mtriple=armv7-linux-gnueabihf %s -o - | FileCheck %s
2
3@array = weak global [4 x i32] zeroinitializer
4
5define i32 @test_lshr_and1(i32 %x) {
6entry:
7;CHECK-LABLE: test_lshr_and1:
8;CHECK:         movw r1, :lower16:array
9;CHECK-NEXT:    and  r0, r0, #12
10;CHECK-NEXT:    movt r1, :upper16:array
11;CHECK-NEXT:    ldr  r0, [r1, r0]
12;CHECK-NEXT:    bx   lr
13  %tmp2 = lshr i32 %x, 2
14  %tmp3 = and i32 %tmp2, 3
15  %tmp4 = getelementptr [4 x i32], [4 x i32]* @array, i32 0, i32 %tmp3
16  %tmp5 = load i32, i32* %tmp4, align 4
17  ret i32 %tmp5
18}
19define i32 @test_lshr_and2(i32 %x) {
20entry:
21;CHECK-LABLE: test_lshr_and2:
22;CHECK:         ubfx r0, r0, #1, #15
23;CHECK-NEXT:    add  r0, r0, r0
24;CHECK-NEXT:    bx   lr
25  %a = and i32 %x, 65534
26  %b = lshr i32 %a, 1
27  %c = and i32 %x, 65535
28  %d = lshr i32 %c, 1
29  %e = add i32 %b, %d
30  ret i32 %e
31}
32