| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | 
 | ; RUN: llc -mtriple=thumbv6m-none-eabi %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-T1 | 
 | ; RUN: llc -mtriple=thumbv7m-none-eabi %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-T2 | 
 | ; RUN: llc -mtriple=armv7a-none-eabi %s -o - | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-ARM | 
 |  | 
 | define ptr @i32_0(ptr %p, i32 %v) { | 
 | ; CHECK-LABEL: i32_0: | 
 | ; CHECK:       @ %bb.0: | 
 | ; CHECK-NEXT:    str r1, [r0] | 
 | ; CHECK-NEXT:    bx lr | 
 |   store i32 %v, ptr %p, align 4 | 
 |   ret ptr %p | 
 | } | 
 |  | 
 | define ptr @i32_3(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_3: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #3 | 
 | ; CHECK-T1-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, #3 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_3: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #3]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_3: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #3]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 3 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_4(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_4: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #4] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, #4 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_4: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #4]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_4: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #4]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_8(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_8: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-T1-NEXT:    adds r0, #8 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_8: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #8]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_8: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #8]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 8 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_m1(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_m1: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, r0, #1 | 
 | ; CHECK-T1-NEXT:    str r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_m1: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #-1]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_m1: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #-1]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -1 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_m4(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_m4: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, r0, #4 | 
 | ; CHECK-T1-NEXT:    str r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_m4: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #-4]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_m4: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #-4]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_252(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_252: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #252 | 
 | ; CHECK-T1-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, #252 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_252: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #252]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_252: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #252]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 252 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_255(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_255: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #255 | 
 | ; CHECK-T1-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, #255 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_255: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #255]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_255: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #255]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 255 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_256(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_256: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #1 | 
 | ; CHECK-T1-NEXT:    lsls r2, r2, #8 | 
 | ; CHECK-T1-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_256: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str.w r1, [r0, #256] | 
 | ; CHECK-T2-NEXT:    add.w r0, r0, #256 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_256: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #256]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 256 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_m252(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_m252: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, #252 | 
 | ; CHECK-T1-NEXT:    str r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_m252: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #-252]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_m252: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #-252]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -252 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_m255(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_m255: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, #255 | 
 | ; CHECK-T1-NEXT:    str r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_m255: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #-255]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_m255: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #-255]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -255 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_m256(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_m256: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #255 | 
 | ; CHECK-T1-NEXT:    mvns r2, r2 | 
 | ; CHECK-T1-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_m256: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    mvn r2, #255 | 
 | ; CHECK-T2-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    sub.w r0, r0, #256 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_m256: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #-256]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -256 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_4095(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_4095: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r2, .LCPI12_0 | 
 | ; CHECK-T1-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI12_0: | 
 | ; CHECK-T1-NEXT:    .long 4095 @ 0xfff | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_4095: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str.w r1, [r0, #4095] | 
 | ; CHECK-T2-NEXT:    addw r0, r0, #4095 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_4095: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #4095]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4095 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_4096(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_4096: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #1 | 
 | ; CHECK-T1-NEXT:    lsls r2, r2, #12 | 
 | ; CHECK-T1-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_4096: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    mov.w r2, #4096 | 
 | ; CHECK-T2-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    add.w r0, r0, #4096 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_4096: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    mov r2, #4096 | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, r2]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4096 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_m4095(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_m4095: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r2, .LCPI14_0 | 
 | ; CHECK-T1-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI14_0: | 
 | ; CHECK-T1-NEXT:    .long 4294963201 @ 0xfffff001 | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_m4095: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    movw r2, #61441 | 
 | ; CHECK-T2-NEXT:    movt r2, #65535 | 
 | ; CHECK-T2-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    subw r0, r0, #4095 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_m4095: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #-4095]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4095 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i32_m4096(ptr %p, i32 %v) { | 
 | ; CHECK-T1-LABEL: i32_m4096: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r2, .LCPI15_0 | 
 | ; CHECK-T1-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI15_0: | 
 | ; CHECK-T1-NEXT:    .long 4294963200 @ 0xfffff000 | 
 | ; | 
 | ; CHECK-T2-LABEL: i32_m4096: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    movw r2, #61440 | 
 | ; CHECK-T2-NEXT:    movt r2, #65535 | 
 | ; CHECK-T2-NEXT:    str r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    sub.w r0, r0, #4096 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i32_m4096: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    movw r2, #61440 | 
 | ; CHECK-ARM-NEXT:    movt r2, #65535 | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, r2]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4096 | 
 |   store i32 %v, ptr %o, align 4 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_0(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_0: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    stm r0!, {r2, r3} | 
 | ; CHECK-T1-NEXT:    subs r0, #8 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_0: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strd r2, r3, [r0] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_0: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    mov r1, r3 | 
 | ; CHECK-ARM-NEXT:    str r2, [r0] | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   store i64 %v, ptr %p, align 8 | 
 |   ret ptr %p | 
 | } | 
 |  | 
 | define ptr @i64_3(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_3: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r1, #3 | 
 | ; CHECK-T1-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, #3 | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_3: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #3]! | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_3: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #3]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 3 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_4(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_4: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    str r2, [r0, #4] | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #8] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, #4 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_4: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #4]! | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_4: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #4]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_8(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_8: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    str r2, [r0, #8] | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #12] | 
 | ; CHECK-T1-NEXT:    adds r0, #8 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_8: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #8]! | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_8: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #8]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 8 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_m1(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_m1: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, r0, #1 | 
 | ; CHECK-T1-NEXT:    stm r0!, {r2, r3} | 
 | ; CHECK-T1-NEXT:    subs r0, #8 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_m1: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #-1]! | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_m1: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #-1]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -1 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_m4(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_m4: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    str r3, [r0] | 
 | ; CHECK-T1-NEXT:    subs r0, r0, #4 | 
 | ; CHECK-T1-NEXT:    str r2, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_m4: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r3, [r0] | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #-4]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_m4: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r3, [r0] | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #-4]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_252(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_252: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r1, #252 | 
 | ; CHECK-T1-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T1-NEXT:    adds r0, #252 | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_252: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #252]! | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_252: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #252]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 252 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_255(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_255: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r1, #255 | 
 | ; CHECK-T1-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T1-NEXT:    adds r0, #255 | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_255: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #255]! | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_255: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #255]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 255 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_256(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_256: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r1, #1 | 
 | ; CHECK-T1-NEXT:    lsls r1, r1, #8 | 
 | ; CHECK-T1-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r1 | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_256: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strd r2, r3, [r0, #256] | 
 | ; CHECK-T2-NEXT:    add.w r0, r0, #256 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_256: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #256]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 256 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_m252(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_m252: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, #252 | 
 | ; CHECK-T1-NEXT:    stm r0!, {r2, r3} | 
 | ; CHECK-T1-NEXT:    subs r0, #8 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_m252: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #-252]! | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_m252: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #-252]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -252 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_m255(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_m255: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, #255 | 
 | ; CHECK-T1-NEXT:    stm r0!, {r2, r3} | 
 | ; CHECK-T1-NEXT:    subs r0, #8 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_m255: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #-255]! | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_m255: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #-255]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -255 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_m256(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_m256: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r1, #255 | 
 | ; CHECK-T1-NEXT:    mvns r1, r1 | 
 | ; CHECK-T1-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r1 | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_m256: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    mvn r1, #255 | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #-252] | 
 | ; CHECK-T2-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T2-NEXT:    sub.w r0, r0, #256 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_m256: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #-256]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -256 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_4095(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_4095: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r1, .LCPI28_0 | 
 | ; CHECK-T1-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r1 | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI28_0: | 
 | ; CHECK-T1-NEXT:    .long 4095 @ 0xfff | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_4095: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str.w r2, [r0, #4095] | 
 | ; CHECK-T2-NEXT:    addw r0, r0, #4095 | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_4095: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #4095]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4095 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_4096(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_4096: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r1, #1 | 
 | ; CHECK-T1-NEXT:    lsls r1, r1, #12 | 
 | ; CHECK-T1-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r1 | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_4096: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    mov.w r1, #4096 | 
 | ; CHECK-T2-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T2-NEXT:    add.w r0, r0, #4096 | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_4096: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    mov r1, #4096 | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, r1]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4096 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_m4095(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_m4095: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r1, .LCPI30_0 | 
 | ; CHECK-T1-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r1 | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI30_0: | 
 | ; CHECK-T1-NEXT:    .long 4294963201 @ 0xfffff001 | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_m4095: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    movw r1, #61441 | 
 | ; CHECK-T2-NEXT:    movt r1, #65535 | 
 | ; CHECK-T2-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T2-NEXT:    subw r0, r0, #4095 | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_m4095: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #-4095]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4095 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i64_m4096(ptr %p, i64 %v) { | 
 | ; CHECK-T1-LABEL: i64_m4096: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r1, .LCPI31_0 | 
 | ; CHECK-T1-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r1 | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI31_0: | 
 | ; CHECK-T1-NEXT:    .long 4294963200 @ 0xfffff000 | 
 | ; | 
 | ; CHECK-T2-LABEL: i64_m4096: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    movw r1, #61440 | 
 | ; CHECK-T2-NEXT:    movt r1, #65535 | 
 | ; CHECK-T2-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T2-NEXT:    sub.w r0, r0, #4096 | 
 | ; CHECK-T2-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i64_m4096: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    movw r1, #61440 | 
 | ; CHECK-ARM-NEXT:    movt r1, #65535 | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, r1]! | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4096 | 
 |   store i64 %v, ptr %o, align 8 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i128_0(ptr %p, i128 %v) { | 
 | ; CHECK-T1-LABEL: i128_0: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #12] | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-T1-NEXT:    stm r0!, {r2, r3} | 
 | ; CHECK-T1-NEXT:    subs r0, #8 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i128_0: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #12] | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-T2-NEXT:    strd r2, r3, [r0] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i128_0: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    ldm sp, {r1, r12} | 
 | ; CHECK-ARM-NEXT:    stm r0, {r2, r3} | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-ARM-NEXT:    str r12, [r0, #12] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   store i128 %v, ptr %p, align 16 | 
 |   ret ptr %p | 
 | } | 
 |  | 
 | define ptr @i128_3(ptr %p, i128 %v) { | 
 | ; CHECK-T1-LABEL: i128_3: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r1, #3 | 
 | ; CHECK-T1-NEXT:    str r2, [r0, r1] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, #3 | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #12] | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i128_3: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #3]! | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #12] | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T2-NEXT:    strd r3, r1, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i128_3: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #3]! | 
 | ; CHECK-ARM-NEXT:    ldm sp, {r1, r12} | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-ARM-NEXT:    str r12, [r0, #12] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 3 | 
 |   store i128 %v, ptr %o, align 16 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i128_4(ptr %p, i128 %v) { | 
 | ; CHECK-T1-LABEL: i128_4: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #16] | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #12] | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #8] | 
 | ; CHECK-T1-NEXT:    str r2, [r0, #4] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, #4 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i128_4: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #4]! | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #12] | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T2-NEXT:    strd r3, r1, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i128_4: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #4]! | 
 | ; CHECK-ARM-NEXT:    ldm sp, {r1, r12} | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-ARM-NEXT:    str r12, [r0, #12] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4 | 
 |   store i128 %v, ptr %o, align 16 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i128_8(ptr %p, i128 %v) { | 
 | ; CHECK-T1-LABEL: i128_8: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #20] | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #16] | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #12] | 
 | ; CHECK-T1-NEXT:    str r2, [r0, #8] | 
 | ; CHECK-T1-NEXT:    adds r0, #8 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i128_8: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #8]! | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #12] | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T2-NEXT:    strd r3, r1, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i128_8: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #8]! | 
 | ; CHECK-ARM-NEXT:    ldm sp, {r1, r12} | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-ARM-NEXT:    str r12, [r0, #12] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 8 | 
 |   store i128 %v, ptr %o, align 16 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i128_16(ptr %p, i128 %v) { | 
 | ; CHECK-T1-LABEL: i128_16: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #28] | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #24] | 
 | ; CHECK-T1-NEXT:    str r3, [r0, #20] | 
 | ; CHECK-T1-NEXT:    str r2, [r0, #16] | 
 | ; CHECK-T1-NEXT:    adds r0, #16 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i128_16: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #16]! | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #12] | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T2-NEXT:    strd r3, r1, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i128_16: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #16]! | 
 | ; CHECK-ARM-NEXT:    ldm sp, {r1, r12} | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-ARM-NEXT:    str r12, [r0, #12] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 16 | 
 |   store i128 %v, ptr %o, align 16 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i128_m1(ptr %p, i128 %v) { | 
 | ; CHECK-T1-LABEL: i128_m1: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, r0, #1 | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #12] | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-T1-NEXT:    stm r0!, {r2, r3} | 
 | ; CHECK-T1-NEXT:    subs r0, #8 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i128_m1: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #-1]! | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #12] | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T2-NEXT:    strd r3, r1, [r0, #4] | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i128_m1: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #-1]! | 
 | ; CHECK-ARM-NEXT:    ldm sp, {r1, r12} | 
 | ; CHECK-ARM-NEXT:    str r3, [r0, #4] | 
 | ; CHECK-ARM-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-ARM-NEXT:    str r12, [r0, #12] | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -1 | 
 |   store i128 %v, ptr %o, align 16 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i128_m4(ptr %p, i128 %v) { | 
 | ; CHECK-T1-LABEL: i128_m4: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-T1-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T1-NEXT:    str r1, [r0, #4] | 
 | ; CHECK-T1-NEXT:    str r3, [r0] | 
 | ; CHECK-T1-NEXT:    subs r0, r0, #4 | 
 | ; CHECK-T1-NEXT:    str r2, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i128_m4: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp, #4] | 
 | ; CHECK-T2-NEXT:    str r1, [r0, #8] | 
 | ; CHECK-T2-NEXT:    ldr r1, [sp] | 
 | ; CHECK-T2-NEXT:    strd r3, r1, [r0] | 
 | ; CHECK-T2-NEXT:    str r2, [r0, #-4]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i128_m4: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    ldm sp, {r1, r12} | 
 | ; CHECK-ARM-NEXT:    str r3, [r0] | 
 | ; CHECK-ARM-NEXT:    stmib r0, {r1, r12} | 
 | ; CHECK-ARM-NEXT:    str r2, [r0, #-4]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4 | 
 |   store i128 %v, ptr %o, align 16 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | ; i16 | 
 |  | 
 | define ptr @i16_0(ptr %p, i16 %v) { | 
 | ; CHECK-LABEL: i16_0: | 
 | ; CHECK:       @ %bb.0: | 
 | ; CHECK-NEXT:    strh r1, [r0] | 
 | ; CHECK-NEXT:    bx lr | 
 |   store i16 %v, ptr %p, align 2 | 
 |   ret ptr %p | 
 | } | 
 |  | 
 | define ptr @i16_3(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_3: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #3 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, #3 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_3: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, #3]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_3: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, #3]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 3 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_4(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_4: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    strh r1, [r0, #4] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, #4 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_4: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, #4]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_4: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, #4]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_8(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_8: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    strh r1, [r0, #8] | 
 | ; CHECK-T1-NEXT:    adds r0, #8 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_8: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, #8]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_8: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, #8]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 8 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_m1(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_m1: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, r0, #1 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_m1: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, #-1]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_m1: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, #-1]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -1 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_m4(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_m4: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, r0, #4 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_m4: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, #-4]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_m4: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, #-4]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_252(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_252: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #252 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, #252 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_252: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, #252]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_252: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, #252]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 252 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_255(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_255: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #255 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, #255 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_255: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, #255]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_255: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, #255]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 255 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_256(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_256: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #1 | 
 | ; CHECK-T1-NEXT:    lsls r2, r2, #8 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_256: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strh.w r1, [r0, #256] | 
 | ; CHECK-T2-NEXT:    add.w r0, r0, #256 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_256: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    mov r2, #256 | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, r2]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 256 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_m252(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_m252: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, #252 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_m252: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, #-252]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_m252: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, #-252]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -252 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_m255(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_m255: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, #255 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_m255: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, #-255]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_m255: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, #-255]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -255 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_m256(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_m256: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #255 | 
 | ; CHECK-T1-NEXT:    mvns r2, r2 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_m256: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    mvn r2, #255 | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    sub.w r0, r0, #256 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_m256: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    mvn r2, #255 | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, r2]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -256 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_4095(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_4095: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r2, .LCPI51_0 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI51_0: | 
 | ; CHECK-T1-NEXT:    .long 4095 @ 0xfff | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_4095: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strh.w r1, [r0, #4095] | 
 | ; CHECK-T2-NEXT:    addw r0, r0, #4095 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_4095: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    movw r2, #4095 | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, r2]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4095 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_4096(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_4096: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #1 | 
 | ; CHECK-T1-NEXT:    lsls r2, r2, #12 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_4096: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    mov.w r2, #4096 | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    add.w r0, r0, #4096 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_4096: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    mov r2, #4096 | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, r2]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4096 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_m4095(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_m4095: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r2, .LCPI53_0 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI53_0: | 
 | ; CHECK-T1-NEXT:    .long 4294963201 @ 0xfffff001 | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_m4095: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    movw r2, #61441 | 
 | ; CHECK-T2-NEXT:    movt r2, #65535 | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    subw r0, r0, #4095 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_m4095: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    movw r2, #61441 | 
 | ; CHECK-ARM-NEXT:    movt r2, #65535 | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, r2]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4095 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i16_m4096(ptr %p, i16 %v) { | 
 | ; CHECK-T1-LABEL: i16_m4096: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r2, .LCPI54_0 | 
 | ; CHECK-T1-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI54_0: | 
 | ; CHECK-T1-NEXT:    .long 4294963200 @ 0xfffff000 | 
 | ; | 
 | ; CHECK-T2-LABEL: i16_m4096: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    movw r2, #61440 | 
 | ; CHECK-T2-NEXT:    movt r2, #65535 | 
 | ; CHECK-T2-NEXT:    strh r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    sub.w r0, r0, #4096 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i16_m4096: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    movw r2, #61440 | 
 | ; CHECK-ARM-NEXT:    movt r2, #65535 | 
 | ; CHECK-ARM-NEXT:    strh r1, [r0, r2]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4096 | 
 |   store i16 %v, ptr %o, align 2 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | ; i8 | 
 |  | 
 | define ptr @i8_0(ptr %p, i8 %v) { | 
 | ; CHECK-LABEL: i8_0: | 
 | ; CHECK:       @ %bb.0: | 
 | ; CHECK-NEXT:    strb r1, [r0] | 
 | ; CHECK-NEXT:    bx lr | 
 |   store i8 %v, ptr %p, align 1 | 
 |   ret ptr %p | 
 | } | 
 |  | 
 | define ptr @i8_3(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_3: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    strb r1, [r0, #3] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, #3 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_3: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, #3]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_3: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #3]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 3 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_4(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_4: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    strb r1, [r0, #4] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, #4 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_4: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, #4]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_4: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #4]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_8(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_8: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    strb r1, [r0, #8] | 
 | ; CHECK-T1-NEXT:    adds r0, #8 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_8: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, #8]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_8: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #8]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 8 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_m1(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_m1: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, r0, #1 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_m1: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, #-1]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_m1: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #-1]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -1 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_m4(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_m4: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, r0, #4 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_m4: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, #-4]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_m4: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #-4]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_252(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_252: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #252 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, #252 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_252: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, #252]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_252: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #252]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 252 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_255(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_255: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #255 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, #255 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_255: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, #255]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_255: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #255]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 255 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_256(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_256: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #1 | 
 | ; CHECK-T1-NEXT:    lsls r2, r2, #8 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_256: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strb.w r1, [r0, #256] | 
 | ; CHECK-T2-NEXT:    add.w r0, r0, #256 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_256: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #256]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 256 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_m252(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_m252: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, #252 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_m252: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, #-252]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_m252: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #-252]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -252 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_m255(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_m255: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    subs r0, #255 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0] | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_m255: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, #-255]! | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_m255: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #-255]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -255 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_m256(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_m256: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #255 | 
 | ; CHECK-T1-NEXT:    mvns r2, r2 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_m256: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    mvn r2, #255 | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    sub.w r0, r0, #256 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_m256: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #-256]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -256 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_4095(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_4095: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r2, .LCPI67_0 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI67_0: | 
 | ; CHECK-T1-NEXT:    .long 4095 @ 0xfff | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_4095: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    strb.w r1, [r0, #4095] | 
 | ; CHECK-T2-NEXT:    addw r0, r0, #4095 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_4095: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #4095]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4095 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_4096(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_4096: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    movs r2, #1 | 
 | ; CHECK-T1-NEXT:    lsls r2, r2, #12 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_4096: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    mov.w r2, #4096 | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    add.w r0, r0, #4096 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_4096: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    mov r2, #4096 | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, r2]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 4096 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_m4095(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_m4095: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r2, .LCPI69_0 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI69_0: | 
 | ; CHECK-T1-NEXT:    .long 4294963201 @ 0xfffff001 | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_m4095: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    movw r2, #61441 | 
 | ; CHECK-T2-NEXT:    movt r2, #65535 | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    subw r0, r0, #4095 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_m4095: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, #-4095]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4095 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } | 
 |  | 
 | define ptr @i8_m4096(ptr %p, i8 %v) { | 
 | ; CHECK-T1-LABEL: i8_m4096: | 
 | ; CHECK-T1:       @ %bb.0: | 
 | ; CHECK-T1-NEXT:    ldr r2, .LCPI70_0 | 
 | ; CHECK-T1-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T1-NEXT:    adds r0, r0, r2 | 
 | ; CHECK-T1-NEXT:    bx lr | 
 | ; CHECK-T1-NEXT:    .p2align 2 | 
 | ; CHECK-T1-NEXT:  @ %bb.1: | 
 | ; CHECK-T1-NEXT:  .LCPI70_0: | 
 | ; CHECK-T1-NEXT:    .long 4294963200 @ 0xfffff000 | 
 | ; | 
 | ; CHECK-T2-LABEL: i8_m4096: | 
 | ; CHECK-T2:       @ %bb.0: | 
 | ; CHECK-T2-NEXT:    movw r2, #61440 | 
 | ; CHECK-T2-NEXT:    movt r2, #65535 | 
 | ; CHECK-T2-NEXT:    strb r1, [r0, r2] | 
 | ; CHECK-T2-NEXT:    sub.w r0, r0, #4096 | 
 | ; CHECK-T2-NEXT:    bx lr | 
 | ; | 
 | ; CHECK-ARM-LABEL: i8_m4096: | 
 | ; CHECK-ARM:       @ %bb.0: | 
 | ; CHECK-ARM-NEXT:    movw r2, #61440 | 
 | ; CHECK-ARM-NEXT:    movt r2, #65535 | 
 | ; CHECK-ARM-NEXT:    strb r1, [r0, r2]! | 
 | ; CHECK-ARM-NEXT:    bx lr | 
 |   %o = getelementptr inbounds i8, ptr %p, i32 -4096 | 
 |   store i8 %v, ptr %o, align 1 | 
 |   ret ptr %o | 
 | } |