brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 6dc5ddc Raw
160 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv6m-eabi -asm-verbose=false %s -o - | FileCheck %s --check-prefix=V6M3 4define i32 @uxth(i32 %x) {5; V6M-LABEL: uxth:6; V6M:         uxth r0, r07; V6M-NEXT:    bx lr8  %xn = and i32 %x, 655359  ret i32 %xn10}11 12define i32 @uxtb(i32 %x) {13; V6M-LABEL: uxtb:14; V6M:         uxtb r0, r015; V6M-NEXT:    bx lr16  %xn = and i32 %x, 25517  ret i32 %xn18}19 20define i32 @uxth_2(i32 %x, i32 %y) {21; V6M-LABEL: uxth_2:22; V6M:         uxth r1, r123; V6M-NEXT:    uxth r0, r024; V6M-NEXT:    muls r0, r1, r025; V6M-NEXT:    bx lr26  %xn = and i32 %x, 6553527  %yn = and i32 %y, 6553528  %r = mul nuw i32 %xn, %yn29  ret i32 %r30}31 32define i32 @uxtb_2(i32 %x, i32 %y) {33; V6M-LABEL: uxtb_2:34; V6M:         uxtb r1, r135; V6M-NEXT:    uxtb r0, r036; V6M-NEXT:    muls r0, r1, r037; V6M-NEXT:    bx lr38  %xn = and i32 %x, 25539  %yn = and i32 %y, 25540  %r = mul nuw nsw i32 %xn, %yn41  ret i32 %r42}43 44define void @uxth_loop(ptr %a, i32 %n) {45; V6M-LABEL: uxth_loop:46; V6M:       .LBB4_1:47; V6M-NEXT:    ldrh r2, [r0]48; V6M-NEXT:    stm r0!, {r2}49; V6M-NEXT:    subs r1, r1, #150; V6M-NEXT:    bne .LBB4_151; V6M-NEXT:    bx lr52entry:53  br label %for.body54 55for.body:56  %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]57  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i58  %x = load i32, ptr %arrayidx59  %xn = and i32 %x, 6553560  store i32 %xn, ptr %arrayidx61  %inc = add nuw nsw i32 %i, 162  %exitcond = icmp eq i32 %inc, %n63  br i1 %exitcond, label %for.cond.cleanup, label %for.body64 65for.cond.cleanup:66  ret void67}68 69define void @uxth_loop_2(ptr %a, i32 %n) {70; V6M-LABEL: uxth_loop_2:71; V6M:         .save {r4, lr}72; V6M-NEXT:    push {r4, lr}73; V6M-NEXT:    movs r2, #074; V6M-NEXT:  .LBB5_1:75; V6M-NEXT:    uxth r3, r276; V6M-NEXT:    ldrh r4, [r0]77; V6M-NEXT:    muls r4, r3, r478; V6M-NEXT:    stm r0!, {r4}79; V6M-NEXT:    adds r2, r2, #180; V6M-NEXT:    cmp r1, r281; V6M-NEXT:    bne .LBB5_182; V6M-NEXT:    pop {r4, pc}83entry:84  br label %for.body85 86for.body:87  %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]88  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i89  %x = load i32, ptr %arrayidx90  %xn = and i32 %x, 6553591  %in = and i32 %i, 6553592  %s = mul i32 %xn, %in93  store i32 %s, ptr %arrayidx94  %inc = add nuw nsw i32 %i, 195  %exitcond = icmp eq i32 %inc, %n96  br i1 %exitcond, label %for.cond.cleanup, label %for.body97 98for.cond.cleanup:99  ret void100}101 102define void @uxtb_loop(ptr %a, i32 %n) {103; V6M-LABEL: uxtb_loop:104; V6M:       .LBB6_1:105; V6M-NEXT:    ldrb r2, [r0]106; V6M-NEXT:    stm r0!, {r2}107; V6M-NEXT:    subs r1, r1, #1108; V6M-NEXT:    bne .LBB6_1109; V6M-NEXT:    bx lr110entry:111  br label %for.body112 113for.body:114  %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]115  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i116  %x = load i32, ptr %arrayidx117  %xn = and i32 %x, 255118  store i32 %xn, ptr %arrayidx119  %inc = add nuw nsw i32 %i, 1120  %exitcond = icmp eq i32 %inc, %n121  br i1 %exitcond, label %for.cond.cleanup, label %for.body122 123for.cond.cleanup:124  ret void125}126 127define void @uxtb_loop_2(ptr %a, i32 %n) {128; V6M-LABEL: uxtb_loop_2:129; V6M:         .save {r4, lr}130; V6M-NEXT:    push {r4, lr}131; V6M-NEXT:    movs r2, #0132; V6M-NEXT:  .LBB7_1:133; V6M-NEXT:    uxtb r3, r2134; V6M-NEXT:    ldrb r4, [r0]135; V6M-NEXT:    muls r4, r3, r4136; V6M-NEXT:    stm r0!, {r4}137; V6M-NEXT:    adds r2, r2, #1138; V6M-NEXT:    cmp r1, r2139; V6M-NEXT:    bne .LBB7_1140; V6M-NEXT:    pop {r4, pc}141entry:142  br label %for.body143 144for.body:145  %i = phi i32 [ 0, %entry ], [ %inc, %for.body ]146  %arrayidx = getelementptr inbounds i32, ptr %a, i32 %i147  %x = load i32, ptr %arrayidx148  %xn = and i32 %x, 255149  %in = and i32 %i, 255150  %s = mul i32 %xn, %in151  store i32 %s, ptr %arrayidx152  %inc = add nuw nsw i32 %i, 1153  %exitcond = icmp eq i32 %inc, %n154  br i1 %exitcond, label %for.cond.cleanup, label %for.body155 156for.cond.cleanup:157  ret void158}159 160