brintos

brintos / llvm-project-archived public Read only

0
0
Text · 35.5 KiB · ca5fd2b Raw
979 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=armv5e-arm-none-eabi -mattr=+strict-align %s -o - | FileCheck %s --check-prefixes=CHECK-ARMV5TE3; RUN: llc -mtriple=thumbv6t2-arm-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-T24; RUN: llc -mtriple=armv4t-arm-none-eabi -mattr=+strict-align %s -o - | FileCheck %s --check-prefixes=CHECK-ARMV4T5; RUN: llc -mtriple=armv7-arm-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-ARMV76; RUN: llc -mtriple=armv7-arm-none-eabi -mattr=+strict-align %s -o - | FileCheck %s --check-prefixes=CHECK-ARMV7-STRICT7; RUN: llc -mtriple=armv6-arm-none-eabi %s -o - | FileCheck %s --check-prefixes=CHECK-ARMV68; RUN: llc -mtriple=armv6-arm-none-eabi -mattr=+strict-align %s -o - | FileCheck %s --check-prefixes=CHECK-ARMV6-STRICT9 10@x = common dso_local global i64 0, align 811@y = common dso_local global i64 0, align 812 13@x_unaligned = common dso_local global i64 0, align 114@y_unaligned = common dso_local global i64 0, align 115 16@x_aligned_4 = common dso_local global i64 0, align 417@y_aligned_4 = common dso_local global i64 0, align 418 19define void @test() {20; CHECK-ARMV5TE-LABEL: test:21; CHECK-ARMV5TE:       @ %bb.0: @ %entry22; CHECK-ARMV5TE-NEXT:    ldr r0, .LCPI0_023; CHECK-ARMV5TE-NEXT:    ldr r2, .LCPI0_124; CHECK-ARMV5TE-NEXT:    ldrd r0, r1, [r0]25; CHECK-ARMV5TE-NEXT:    strd r0, r1, [r2]26; CHECK-ARMV5TE-NEXT:    bx lr27; CHECK-ARMV5TE-NEXT:    .p2align 228; CHECK-ARMV5TE-NEXT:  @ %bb.1:29; CHECK-ARMV5TE-NEXT:  .LCPI0_0:30; CHECK-ARMV5TE-NEXT:    .long x31; CHECK-ARMV5TE-NEXT:  .LCPI0_1:32; CHECK-ARMV5TE-NEXT:    .long y33;34; CHECK-T2-LABEL: test:35; CHECK-T2:       @ %bb.0: @ %entry36; CHECK-T2-NEXT:    movw r0, :lower16:x37; CHECK-T2-NEXT:    movw r2, :lower16:y38; CHECK-T2-NEXT:    movt r0, :upper16:x39; CHECK-T2-NEXT:    movt r2, :upper16:y40; CHECK-T2-NEXT:    ldrd r0, r1, [r0]41; CHECK-T2-NEXT:    strd r0, r1, [r2]42; CHECK-T2-NEXT:    bx lr43;44; CHECK-ARMV4T-LABEL: test:45; CHECK-ARMV4T:       @ %bb.0: @ %entry46; CHECK-ARMV4T-NEXT:    ldr r0, .LCPI0_047; CHECK-ARMV4T-NEXT:    ldr r2, .LCPI0_148; CHECK-ARMV4T-NEXT:    ldr r1, [r0]49; CHECK-ARMV4T-NEXT:    ldr r0, [r0, #4]50; CHECK-ARMV4T-NEXT:    str r0, [r2, #4]51; CHECK-ARMV4T-NEXT:    str r1, [r2]52; CHECK-ARMV4T-NEXT:    bx lr53; CHECK-ARMV4T-NEXT:    .p2align 254; CHECK-ARMV4T-NEXT:  @ %bb.1:55; CHECK-ARMV4T-NEXT:  .LCPI0_0:56; CHECK-ARMV4T-NEXT:    .long x57; CHECK-ARMV4T-NEXT:  .LCPI0_1:58; CHECK-ARMV4T-NEXT:    .long y59;60; CHECK-ARMV7-LABEL: test:61; CHECK-ARMV7:       @ %bb.0: @ %entry62; CHECK-ARMV7-NEXT:    movw r0, :lower16:x63; CHECK-ARMV7-NEXT:    movw r2, :lower16:y64; CHECK-ARMV7-NEXT:    movt r0, :upper16:x65; CHECK-ARMV7-NEXT:    movt r2, :upper16:y66; CHECK-ARMV7-NEXT:    ldrd r0, r1, [r0]67; CHECK-ARMV7-NEXT:    strd r0, r1, [r2]68; CHECK-ARMV7-NEXT:    bx lr69;70; CHECK-ARMV7-STRICT-LABEL: test:71; CHECK-ARMV7-STRICT:       @ %bb.0: @ %entry72; CHECK-ARMV7-STRICT-NEXT:    movw r0, :lower16:x73; CHECK-ARMV7-STRICT-NEXT:    movw r2, :lower16:y74; CHECK-ARMV7-STRICT-NEXT:    movt r0, :upper16:x75; CHECK-ARMV7-STRICT-NEXT:    movt r2, :upper16:y76; CHECK-ARMV7-STRICT-NEXT:    ldrd r0, r1, [r0]77; CHECK-ARMV7-STRICT-NEXT:    strd r0, r1, [r2]78; CHECK-ARMV7-STRICT-NEXT:    bx lr79;80; CHECK-ARMV6-LABEL: test:81; CHECK-ARMV6:       @ %bb.0: @ %entry82; CHECK-ARMV6-NEXT:    ldr r0, .LCPI0_083; CHECK-ARMV6-NEXT:    ldr r2, .LCPI0_184; CHECK-ARMV6-NEXT:    ldrd r0, r1, [r0]85; CHECK-ARMV6-NEXT:    strd r0, r1, [r2]86; CHECK-ARMV6-NEXT:    bx lr87; CHECK-ARMV6-NEXT:    .p2align 288; CHECK-ARMV6-NEXT:  @ %bb.1:89; CHECK-ARMV6-NEXT:  .LCPI0_0:90; CHECK-ARMV6-NEXT:    .long x91; CHECK-ARMV6-NEXT:  .LCPI0_1:92; CHECK-ARMV6-NEXT:    .long y93;94; CHECK-ARMV6-STRICT-LABEL: test:95; CHECK-ARMV6-STRICT:       @ %bb.0: @ %entry96; CHECK-ARMV6-STRICT-NEXT:    ldr r0, .LCPI0_097; CHECK-ARMV6-STRICT-NEXT:    ldr r2, .LCPI0_198; CHECK-ARMV6-STRICT-NEXT:    ldrd r0, r1, [r0]99; CHECK-ARMV6-STRICT-NEXT:    strd r0, r1, [r2]100; CHECK-ARMV6-STRICT-NEXT:    bx lr101; CHECK-ARMV6-STRICT-NEXT:    .p2align 2102; CHECK-ARMV6-STRICT-NEXT:  @ %bb.1:103; CHECK-ARMV6-STRICT-NEXT:  .LCPI0_0:104; CHECK-ARMV6-STRICT-NEXT:    .long x105; CHECK-ARMV6-STRICT-NEXT:  .LCPI0_1:106; CHECK-ARMV6-STRICT-NEXT:    .long y107entry:108 109 110 111 112  %0 = load volatile i64, ptr @x, align 8113  store volatile i64 %0, ptr @y, align 8114  ret void115}116 117define void @test_unaligned() {118; CHECK-ARMV5TE-LABEL: test_unaligned:119; CHECK-ARMV5TE:       @ %bb.0: @ %entry120; CHECK-ARMV5TE-NEXT:    .save {r4, r5, r6, lr}121; CHECK-ARMV5TE-NEXT:    push {r4, r5, r6, lr}122; CHECK-ARMV5TE-NEXT:    ldr r0, .LCPI1_0123; CHECK-ARMV5TE-NEXT:    ldr r6, .LCPI1_1124; CHECK-ARMV5TE-NEXT:    mov r1, r0125; CHECK-ARMV5TE-NEXT:    ldrb lr, [r1, #4]!126; CHECK-ARMV5TE-NEXT:    ldrb r3, [r1, #2]127; CHECK-ARMV5TE-NEXT:    ldrb r12, [r1, #3]128; CHECK-ARMV5TE-NEXT:    ldrb r1, [r0]129; CHECK-ARMV5TE-NEXT:    ldrb r2, [r0, #1]130; CHECK-ARMV5TE-NEXT:    ldrb r4, [r0, #2]131; CHECK-ARMV5TE-NEXT:    ldrb r5, [r0, #3]132; CHECK-ARMV5TE-NEXT:    ldrb r0, [r0, #5]133; CHECK-ARMV5TE-NEXT:    strb r0, [r6, #5]134; CHECK-ARMV5TE-NEXT:    strb r4, [r6, #2]135; CHECK-ARMV5TE-NEXT:    strb r5, [r6, #3]136; CHECK-ARMV5TE-NEXT:    strb r1, [r6]137; CHECK-ARMV5TE-NEXT:    strb r2, [r6, #1]138; CHECK-ARMV5TE-NEXT:    strb lr, [r6, #4]!139; CHECK-ARMV5TE-NEXT:    strb r3, [r6, #2]140; CHECK-ARMV5TE-NEXT:    strb r12, [r6, #3]141; CHECK-ARMV5TE-NEXT:    pop {r4, r5, r6, pc}142; CHECK-ARMV5TE-NEXT:    .p2align 2143; CHECK-ARMV5TE-NEXT:  @ %bb.1:144; CHECK-ARMV5TE-NEXT:  .LCPI1_0:145; CHECK-ARMV5TE-NEXT:    .long x_unaligned146; CHECK-ARMV5TE-NEXT:  .LCPI1_1:147; CHECK-ARMV5TE-NEXT:    .long y_unaligned148;149; CHECK-T2-LABEL: test_unaligned:150; CHECK-T2:       @ %bb.0: @ %entry151; CHECK-T2-NEXT:    movw r0, :lower16:x_unaligned152; CHECK-T2-NEXT:    movw r2, :lower16:y_unaligned153; CHECK-T2-NEXT:    movt r0, :upper16:x_unaligned154; CHECK-T2-NEXT:    movt r2, :upper16:y_unaligned155; CHECK-T2-NEXT:    ldr r1, [r0]156; CHECK-T2-NEXT:    ldr r0, [r0, #4]157; CHECK-T2-NEXT:    str r0, [r2, #4]158; CHECK-T2-NEXT:    str r1, [r2]159; CHECK-T2-NEXT:    bx lr160;161; CHECK-ARMV4T-LABEL: test_unaligned:162; CHECK-ARMV4T:       @ %bb.0: @ %entry163; CHECK-ARMV4T-NEXT:    .save {r4, r5, r6, lr}164; CHECK-ARMV4T-NEXT:    push {r4, r5, r6, lr}165; CHECK-ARMV4T-NEXT:    ldr r0, .LCPI1_0166; CHECK-ARMV4T-NEXT:    ldr r6, .LCPI1_1167; CHECK-ARMV4T-NEXT:    mov r1, r0168; CHECK-ARMV4T-NEXT:    ldrb lr, [r1, #4]!169; CHECK-ARMV4T-NEXT:    ldrb r3, [r1, #2]170; CHECK-ARMV4T-NEXT:    ldrb r12, [r1, #3]171; CHECK-ARMV4T-NEXT:    ldrb r1, [r0]172; CHECK-ARMV4T-NEXT:    ldrb r2, [r0, #1]173; CHECK-ARMV4T-NEXT:    ldrb r4, [r0, #2]174; CHECK-ARMV4T-NEXT:    ldrb r5, [r0, #3]175; CHECK-ARMV4T-NEXT:    ldrb r0, [r0, #5]176; CHECK-ARMV4T-NEXT:    strb r0, [r6, #5]177; CHECK-ARMV4T-NEXT:    strb r4, [r6, #2]178; CHECK-ARMV4T-NEXT:    strb r5, [r6, #3]179; CHECK-ARMV4T-NEXT:    strb r1, [r6]180; CHECK-ARMV4T-NEXT:    strb r2, [r6, #1]181; CHECK-ARMV4T-NEXT:    strb lr, [r6, #4]!182; CHECK-ARMV4T-NEXT:    strb r3, [r6, #2]183; CHECK-ARMV4T-NEXT:    strb r12, [r6, #3]184; CHECK-ARMV4T-NEXT:    pop {r4, r5, r6, lr}185; CHECK-ARMV4T-NEXT:    bx lr186; CHECK-ARMV4T-NEXT:    .p2align 2187; CHECK-ARMV4T-NEXT:  @ %bb.1:188; CHECK-ARMV4T-NEXT:  .LCPI1_0:189; CHECK-ARMV4T-NEXT:    .long x_unaligned190; CHECK-ARMV4T-NEXT:  .LCPI1_1:191; CHECK-ARMV4T-NEXT:    .long y_unaligned192;193; CHECK-ARMV7-LABEL: test_unaligned:194; CHECK-ARMV7:       @ %bb.0: @ %entry195; CHECK-ARMV7-NEXT:    movw r0, :lower16:x_unaligned196; CHECK-ARMV7-NEXT:    movw r2, :lower16:y_unaligned197; CHECK-ARMV7-NEXT:    movt r0, :upper16:x_unaligned198; CHECK-ARMV7-NEXT:    movt r2, :upper16:y_unaligned199; CHECK-ARMV7-NEXT:    ldr r1, [r0]200; CHECK-ARMV7-NEXT:    ldr r0, [r0, #4]201; CHECK-ARMV7-NEXT:    str r0, [r2, #4]202; CHECK-ARMV7-NEXT:    str r1, [r2]203; CHECK-ARMV7-NEXT:    bx lr204;205; CHECK-ARMV7-STRICT-LABEL: test_unaligned:206; CHECK-ARMV7-STRICT:       @ %bb.0: @ %entry207; CHECK-ARMV7-STRICT-NEXT:    .save {r4, r5, r6, lr}208; CHECK-ARMV7-STRICT-NEXT:    push {r4, r5, r6, lr}209; CHECK-ARMV7-STRICT-NEXT:    movw r0, :lower16:x_unaligned210; CHECK-ARMV7-STRICT-NEXT:    movw r6, :lower16:y_unaligned211; CHECK-ARMV7-STRICT-NEXT:    movt r0, :upper16:x_unaligned212; CHECK-ARMV7-STRICT-NEXT:    movt r6, :upper16:y_unaligned213; CHECK-ARMV7-STRICT-NEXT:    mov r1, r0214; CHECK-ARMV7-STRICT-NEXT:    ldrb r12, [r1, #4]!215; CHECK-ARMV7-STRICT-NEXT:    ldrb r3, [r0]216; CHECK-ARMV7-STRICT-NEXT:    ldrb lr, [r0, #1]217; CHECK-ARMV7-STRICT-NEXT:    ldrb r2, [r0, #2]218; CHECK-ARMV7-STRICT-NEXT:    ldrb r4, [r0, #3]219; CHECK-ARMV7-STRICT-NEXT:    ldrb r0, [r0, #5]220; CHECK-ARMV7-STRICT-NEXT:    ldrb r5, [r1, #2]221; CHECK-ARMV7-STRICT-NEXT:    ldrb r1, [r1, #3]222; CHECK-ARMV7-STRICT-NEXT:    strb r0, [r6, #5]223; CHECK-ARMV7-STRICT-NEXT:    strb r2, [r6, #2]224; CHECK-ARMV7-STRICT-NEXT:    strb r4, [r6, #3]225; CHECK-ARMV7-STRICT-NEXT:    strb r3, [r6]226; CHECK-ARMV7-STRICT-NEXT:    strb lr, [r6, #1]227; CHECK-ARMV7-STRICT-NEXT:    strb r12, [r6, #4]!228; CHECK-ARMV7-STRICT-NEXT:    strb r5, [r6, #2]229; CHECK-ARMV7-STRICT-NEXT:    strb r1, [r6, #3]230; CHECK-ARMV7-STRICT-NEXT:    pop {r4, r5, r6, pc}231;232; CHECK-ARMV6-LABEL: test_unaligned:233; CHECK-ARMV6:       @ %bb.0: @ %entry234; CHECK-ARMV6-NEXT:    ldr r0, .LCPI1_0235; CHECK-ARMV6-NEXT:    ldr r2, .LCPI1_1236; CHECK-ARMV6-NEXT:    ldr r1, [r0]237; CHECK-ARMV6-NEXT:    ldr r0, [r0, #4]238; CHECK-ARMV6-NEXT:    str r0, [r2, #4]239; CHECK-ARMV6-NEXT:    str r1, [r2]240; CHECK-ARMV6-NEXT:    bx lr241; CHECK-ARMV6-NEXT:    .p2align 2242; CHECK-ARMV6-NEXT:  @ %bb.1:243; CHECK-ARMV6-NEXT:  .LCPI1_0:244; CHECK-ARMV6-NEXT:    .long x_unaligned245; CHECK-ARMV6-NEXT:  .LCPI1_1:246; CHECK-ARMV6-NEXT:    .long y_unaligned247;248; CHECK-ARMV6-STRICT-LABEL: test_unaligned:249; CHECK-ARMV6-STRICT:       @ %bb.0: @ %entry250; CHECK-ARMV6-STRICT-NEXT:    .save {r4, r5, r6, lr}251; CHECK-ARMV6-STRICT-NEXT:    push {r4, r5, r6, lr}252; CHECK-ARMV6-STRICT-NEXT:    ldr r0, .LCPI1_0253; CHECK-ARMV6-STRICT-NEXT:    ldr r6, .LCPI1_1254; CHECK-ARMV6-STRICT-NEXT:    mov r1, r0255; CHECK-ARMV6-STRICT-NEXT:    ldrb lr, [r1, #4]!256; CHECK-ARMV6-STRICT-NEXT:    ldrb r3, [r1, #2]257; CHECK-ARMV6-STRICT-NEXT:    ldrb r12, [r1, #3]258; CHECK-ARMV6-STRICT-NEXT:    ldrb r1, [r0]259; CHECK-ARMV6-STRICT-NEXT:    ldrb r2, [r0, #1]260; CHECK-ARMV6-STRICT-NEXT:    ldrb r4, [r0, #2]261; CHECK-ARMV6-STRICT-NEXT:    ldrb r5, [r0, #3]262; CHECK-ARMV6-STRICT-NEXT:    ldrb r0, [r0, #5]263; CHECK-ARMV6-STRICT-NEXT:    strb r0, [r6, #5]264; CHECK-ARMV6-STRICT-NEXT:    strb r4, [r6, #2]265; CHECK-ARMV6-STRICT-NEXT:    strb r5, [r6, #3]266; CHECK-ARMV6-STRICT-NEXT:    strb r1, [r6]267; CHECK-ARMV6-STRICT-NEXT:    strb r2, [r6, #1]268; CHECK-ARMV6-STRICT-NEXT:    strb lr, [r6, #4]!269; CHECK-ARMV6-STRICT-NEXT:    strb r3, [r6, #2]270; CHECK-ARMV6-STRICT-NEXT:    strb r12, [r6, #3]271; CHECK-ARMV6-STRICT-NEXT:    pop {r4, r5, r6, pc}272; CHECK-ARMV6-STRICT-NEXT:    .p2align 2273; CHECK-ARMV6-STRICT-NEXT:  @ %bb.1:274; CHECK-ARMV6-STRICT-NEXT:  .LCPI1_0:275; CHECK-ARMV6-STRICT-NEXT:    .long x_unaligned276; CHECK-ARMV6-STRICT-NEXT:  .LCPI1_1:277; CHECK-ARMV6-STRICT-NEXT:    .long y_unaligned278entry:279  %0 = load volatile i64, ptr @x_unaligned, align 1280  store volatile i64 %0, ptr @y_unaligned, align 1281  ret void282}283 284define void @test_align_4() {285; CHECK-ARMV5TE-LABEL: test_align_4:286; CHECK-ARMV5TE:       @ %bb.0: @ %entry287; CHECK-ARMV5TE-NEXT:    ldr r0, .LCPI2_0288; CHECK-ARMV5TE-NEXT:    ldr r2, .LCPI2_1289; CHECK-ARMV5TE-NEXT:    ldr r1, [r0]290; CHECK-ARMV5TE-NEXT:    ldr r0, [r0, #4]291; CHECK-ARMV5TE-NEXT:    str r0, [r2, #4]292; CHECK-ARMV5TE-NEXT:    str r1, [r2]293; CHECK-ARMV5TE-NEXT:    bx lr294; CHECK-ARMV5TE-NEXT:    .p2align 2295; CHECK-ARMV5TE-NEXT:  @ %bb.1:296; CHECK-ARMV5TE-NEXT:  .LCPI2_0:297; CHECK-ARMV5TE-NEXT:    .long x_aligned_4298; CHECK-ARMV5TE-NEXT:  .LCPI2_1:299; CHECK-ARMV5TE-NEXT:    .long y_aligned_4300;301; CHECK-T2-LABEL: test_align_4:302; CHECK-T2:       @ %bb.0: @ %entry303; CHECK-T2-NEXT:    movw r0, :lower16:x_aligned_4304; CHECK-T2-NEXT:    movw r2, :lower16:y_aligned_4305; CHECK-T2-NEXT:    movt r0, :upper16:x_aligned_4306; CHECK-T2-NEXT:    movt r2, :upper16:y_aligned_4307; CHECK-T2-NEXT:    ldrd r0, r1, [r0]308; CHECK-T2-NEXT:    strd r0, r1, [r2]309; CHECK-T2-NEXT:    bx lr310;311; CHECK-ARMV4T-LABEL: test_align_4:312; CHECK-ARMV4T:       @ %bb.0: @ %entry313; CHECK-ARMV4T-NEXT:    ldr r0, .LCPI2_0314; CHECK-ARMV4T-NEXT:    ldr r2, .LCPI2_1315; CHECK-ARMV4T-NEXT:    ldr r1, [r0]316; CHECK-ARMV4T-NEXT:    ldr r0, [r0, #4]317; CHECK-ARMV4T-NEXT:    str r0, [r2, #4]318; CHECK-ARMV4T-NEXT:    str r1, [r2]319; CHECK-ARMV4T-NEXT:    bx lr320; CHECK-ARMV4T-NEXT:    .p2align 2321; CHECK-ARMV4T-NEXT:  @ %bb.1:322; CHECK-ARMV4T-NEXT:  .LCPI2_0:323; CHECK-ARMV4T-NEXT:    .long x_aligned_4324; CHECK-ARMV4T-NEXT:  .LCPI2_1:325; CHECK-ARMV4T-NEXT:    .long y_aligned_4326;327; CHECK-ARMV7-LABEL: test_align_4:328; CHECK-ARMV7:       @ %bb.0: @ %entry329; CHECK-ARMV7-NEXT:    movw r0, :lower16:x_aligned_4330; CHECK-ARMV7-NEXT:    movw r2, :lower16:y_aligned_4331; CHECK-ARMV7-NEXT:    movt r0, :upper16:x_aligned_4332; CHECK-ARMV7-NEXT:    movt r2, :upper16:y_aligned_4333; CHECK-ARMV7-NEXT:    ldrd r0, r1, [r0]334; CHECK-ARMV7-NEXT:    strd r0, r1, [r2]335; CHECK-ARMV7-NEXT:    bx lr336;337; CHECK-ARMV7-STRICT-LABEL: test_align_4:338; CHECK-ARMV7-STRICT:       @ %bb.0: @ %entry339; CHECK-ARMV7-STRICT-NEXT:    movw r0, :lower16:x_aligned_4340; CHECK-ARMV7-STRICT-NEXT:    movw r2, :lower16:y_aligned_4341; CHECK-ARMV7-STRICT-NEXT:    movt r0, :upper16:x_aligned_4342; CHECK-ARMV7-STRICT-NEXT:    movt r2, :upper16:y_aligned_4343; CHECK-ARMV7-STRICT-NEXT:    ldrd r0, r1, [r0]344; CHECK-ARMV7-STRICT-NEXT:    strd r0, r1, [r2]345; CHECK-ARMV7-STRICT-NEXT:    bx lr346;347; CHECK-ARMV6-LABEL: test_align_4:348; CHECK-ARMV6:       @ %bb.0: @ %entry349; CHECK-ARMV6-NEXT:    ldr r0, .LCPI2_0350; CHECK-ARMV6-NEXT:    ldr r2, .LCPI2_1351; CHECK-ARMV6-NEXT:    ldrd r0, r1, [r0]352; CHECK-ARMV6-NEXT:    strd r0, r1, [r2]353; CHECK-ARMV6-NEXT:    bx lr354; CHECK-ARMV6-NEXT:    .p2align 2355; CHECK-ARMV6-NEXT:  @ %bb.1:356; CHECK-ARMV6-NEXT:  .LCPI2_0:357; CHECK-ARMV6-NEXT:    .long x_aligned_4358; CHECK-ARMV6-NEXT:  .LCPI2_1:359; CHECK-ARMV6-NEXT:    .long y_aligned_4360;361; CHECK-ARMV6-STRICT-LABEL: test_align_4:362; CHECK-ARMV6-STRICT:       @ %bb.0: @ %entry363; CHECK-ARMV6-STRICT-NEXT:    ldr r0, .LCPI2_0364; CHECK-ARMV6-STRICT-NEXT:    ldr r2, .LCPI2_1365; CHECK-ARMV6-STRICT-NEXT:    ldr r1, [r0]366; CHECK-ARMV6-STRICT-NEXT:    ldr r0, [r0, #4]367; CHECK-ARMV6-STRICT-NEXT:    str r0, [r2, #4]368; CHECK-ARMV6-STRICT-NEXT:    str r1, [r2]369; CHECK-ARMV6-STRICT-NEXT:    bx lr370; CHECK-ARMV6-STRICT-NEXT:    .p2align 2371; CHECK-ARMV6-STRICT-NEXT:  @ %bb.1:372; CHECK-ARMV6-STRICT-NEXT:  .LCPI2_0:373; CHECK-ARMV6-STRICT-NEXT:    .long x_aligned_4374; CHECK-ARMV6-STRICT-NEXT:  .LCPI2_1:375; CHECK-ARMV6-STRICT-NEXT:    .long y_aligned_4376entry:377  %0 = load volatile i64, ptr @x_aligned_4, align 4378  store volatile i64 %0, ptr @y_aligned_4, align 4379  ret void380}381 382define void @test_offset() {383; CHECK-ARMV5TE-LABEL: test_offset:384; CHECK-ARMV5TE:       @ %bb.0: @ %entry385; CHECK-ARMV5TE-NEXT:    ldr r0, .LCPI3_0386; CHECK-ARMV5TE-NEXT:    ldr r2, .LCPI3_1387; CHECK-ARMV5TE-NEXT:    ldrd r0, r1, [r0, #-4]388; CHECK-ARMV5TE-NEXT:    strd r0, r1, [r2, #-4]389; CHECK-ARMV5TE-NEXT:    bx lr390; CHECK-ARMV5TE-NEXT:    .p2align 2391; CHECK-ARMV5TE-NEXT:  @ %bb.1:392; CHECK-ARMV5TE-NEXT:  .LCPI3_0:393; CHECK-ARMV5TE-NEXT:    .long x394; CHECK-ARMV5TE-NEXT:  .LCPI3_1:395; CHECK-ARMV5TE-NEXT:    .long y396;397; CHECK-T2-LABEL: test_offset:398; CHECK-T2:       @ %bb.0: @ %entry399; CHECK-T2-NEXT:    movw r0, :lower16:x400; CHECK-T2-NEXT:    movw r2, :lower16:y401; CHECK-T2-NEXT:    movt r0, :upper16:x402; CHECK-T2-NEXT:    movt r2, :upper16:y403; CHECK-T2-NEXT:    ldrd r0, r1, [r0, #-4]404; CHECK-T2-NEXT:    strd r0, r1, [r2, #-4]405; CHECK-T2-NEXT:    bx lr406;407; CHECK-ARMV4T-LABEL: test_offset:408; CHECK-ARMV4T:       @ %bb.0: @ %entry409; CHECK-ARMV4T-NEXT:    ldr r0, .LCPI3_0410; CHECK-ARMV4T-NEXT:    ldr r2, .LCPI3_1411; CHECK-ARMV4T-NEXT:    ldr r1, [r0, #-4]412; CHECK-ARMV4T-NEXT:    ldr r0, [r0]413; CHECK-ARMV4T-NEXT:    str r0, [r2]414; CHECK-ARMV4T-NEXT:    str r1, [r2, #-4]415; CHECK-ARMV4T-NEXT:    bx lr416; CHECK-ARMV4T-NEXT:    .p2align 2417; CHECK-ARMV4T-NEXT:  @ %bb.1:418; CHECK-ARMV4T-NEXT:  .LCPI3_0:419; CHECK-ARMV4T-NEXT:    .long x420; CHECK-ARMV4T-NEXT:  .LCPI3_1:421; CHECK-ARMV4T-NEXT:    .long y422;423; CHECK-ARMV7-LABEL: test_offset:424; CHECK-ARMV7:       @ %bb.0: @ %entry425; CHECK-ARMV7-NEXT:    movw r0, :lower16:x426; CHECK-ARMV7-NEXT:    movw r2, :lower16:y427; CHECK-ARMV7-NEXT:    movt r0, :upper16:x428; CHECK-ARMV7-NEXT:    movt r2, :upper16:y429; CHECK-ARMV7-NEXT:    ldrd r0, r1, [r0, #-4]430; CHECK-ARMV7-NEXT:    strd r0, r1, [r2, #-4]431; CHECK-ARMV7-NEXT:    bx lr432;433; CHECK-ARMV7-STRICT-LABEL: test_offset:434; CHECK-ARMV7-STRICT:       @ %bb.0: @ %entry435; CHECK-ARMV7-STRICT-NEXT:    movw r0, :lower16:x436; CHECK-ARMV7-STRICT-NEXT:    movw r2, :lower16:y437; CHECK-ARMV7-STRICT-NEXT:    movt r0, :upper16:x438; CHECK-ARMV7-STRICT-NEXT:    movt r2, :upper16:y439; CHECK-ARMV7-STRICT-NEXT:    ldrd r0, r1, [r0, #-4]440; CHECK-ARMV7-STRICT-NEXT:    strd r0, r1, [r2, #-4]441; CHECK-ARMV7-STRICT-NEXT:    bx lr442;443; CHECK-ARMV6-LABEL: test_offset:444; CHECK-ARMV6:       @ %bb.0: @ %entry445; CHECK-ARMV6-NEXT:    ldr r0, .LCPI3_0446; CHECK-ARMV6-NEXT:    ldr r2, .LCPI3_1447; CHECK-ARMV6-NEXT:    ldrd r0, r1, [r0, #-4]448; CHECK-ARMV6-NEXT:    strd r0, r1, [r2, #-4]449; CHECK-ARMV6-NEXT:    bx lr450; CHECK-ARMV6-NEXT:    .p2align 2451; CHECK-ARMV6-NEXT:  @ %bb.1:452; CHECK-ARMV6-NEXT:  .LCPI3_0:453; CHECK-ARMV6-NEXT:    .long x454; CHECK-ARMV6-NEXT:  .LCPI3_1:455; CHECK-ARMV6-NEXT:    .long y456;457; CHECK-ARMV6-STRICT-LABEL: test_offset:458; CHECK-ARMV6-STRICT:       @ %bb.0: @ %entry459; CHECK-ARMV6-STRICT-NEXT:    ldr r0, .LCPI3_0460; CHECK-ARMV6-STRICT-NEXT:    ldr r2, .LCPI3_1461; CHECK-ARMV6-STRICT-NEXT:    ldrd r0, r1, [r0, #-4]462; CHECK-ARMV6-STRICT-NEXT:    strd r0, r1, [r2, #-4]463; CHECK-ARMV6-STRICT-NEXT:    bx lr464; CHECK-ARMV6-STRICT-NEXT:    .p2align 2465; CHECK-ARMV6-STRICT-NEXT:  @ %bb.1:466; CHECK-ARMV6-STRICT-NEXT:  .LCPI3_0:467; CHECK-ARMV6-STRICT-NEXT:    .long x468; CHECK-ARMV6-STRICT-NEXT:  .LCPI3_1:469; CHECK-ARMV6-STRICT-NEXT:    .long y470entry:471  %0 = load volatile i64, ptr getelementptr (i8, ptr @x, i32 -4), align 8472  store volatile i64 %0, ptr getelementptr (i8, ptr @y, i32 -4), align 8473  ret void474}475 476define void @test_offset_1() {477; CHECK-ARMV5TE-LABEL: test_offset_1:478; CHECK-ARMV5TE:       @ %bb.0: @ %entry479; CHECK-ARMV5TE-NEXT:    ldr r0, .LCPI4_0480; CHECK-ARMV5TE-NEXT:    ldr r2, .LCPI4_1481; CHECK-ARMV5TE-NEXT:    ldrd r0, r1, [r0, #255]482; CHECK-ARMV5TE-NEXT:    strd r0, r1, [r2, #255]483; CHECK-ARMV5TE-NEXT:    bx lr484; CHECK-ARMV5TE-NEXT:    .p2align 2485; CHECK-ARMV5TE-NEXT:  @ %bb.1:486; CHECK-ARMV5TE-NEXT:  .LCPI4_0:487; CHECK-ARMV5TE-NEXT:    .long x488; CHECK-ARMV5TE-NEXT:  .LCPI4_1:489; CHECK-ARMV5TE-NEXT:    .long y490;491; CHECK-T2-LABEL: test_offset_1:492; CHECK-T2:       @ %bb.0: @ %entry493; CHECK-T2-NEXT:    movw r0, :lower16:y494; CHECK-T2-NEXT:    movw r1, :lower16:x495; CHECK-T2-NEXT:    movt r0, :upper16:y496; CHECK-T2-NEXT:    movt r1, :upper16:x497; CHECK-T2-NEXT:    adds r1, #255498; CHECK-T2-NEXT:    adds r0, #255499; CHECK-T2-NEXT:    ldrd r1, r2, [r1]500; CHECK-T2-NEXT:    strd r1, r2, [r0]501; CHECK-T2-NEXT:    bx lr502;503; CHECK-ARMV4T-LABEL: test_offset_1:504; CHECK-ARMV4T:       @ %bb.0: @ %entry505; CHECK-ARMV4T-NEXT:    ldr r0, .LCPI4_0506; CHECK-ARMV4T-NEXT:    ldr r2, .LCPI4_1507; CHECK-ARMV4T-NEXT:    ldr r1, [r0, #255]508; CHECK-ARMV4T-NEXT:    ldr r0, [r0, #259]509; CHECK-ARMV4T-NEXT:    str r0, [r2, #259]510; CHECK-ARMV4T-NEXT:    str r1, [r2, #255]511; CHECK-ARMV4T-NEXT:    bx lr512; CHECK-ARMV4T-NEXT:    .p2align 2513; CHECK-ARMV4T-NEXT:  @ %bb.1:514; CHECK-ARMV4T-NEXT:  .LCPI4_0:515; CHECK-ARMV4T-NEXT:    .long x516; CHECK-ARMV4T-NEXT:  .LCPI4_1:517; CHECK-ARMV4T-NEXT:    .long y518;519; CHECK-ARMV7-LABEL: test_offset_1:520; CHECK-ARMV7:       @ %bb.0: @ %entry521; CHECK-ARMV7-NEXT:    movw r0, :lower16:x522; CHECK-ARMV7-NEXT:    movw r2, :lower16:y523; CHECK-ARMV7-NEXT:    movt r0, :upper16:x524; CHECK-ARMV7-NEXT:    movt r2, :upper16:y525; CHECK-ARMV7-NEXT:    ldrd r0, r1, [r0, #255]526; CHECK-ARMV7-NEXT:    strd r0, r1, [r2, #255]527; CHECK-ARMV7-NEXT:    bx lr528;529; CHECK-ARMV7-STRICT-LABEL: test_offset_1:530; CHECK-ARMV7-STRICT:       @ %bb.0: @ %entry531; CHECK-ARMV7-STRICT-NEXT:    movw r0, :lower16:x532; CHECK-ARMV7-STRICT-NEXT:    movw r2, :lower16:y533; CHECK-ARMV7-STRICT-NEXT:    movt r0, :upper16:x534; CHECK-ARMV7-STRICT-NEXT:    movt r2, :upper16:y535; CHECK-ARMV7-STRICT-NEXT:    ldrd r0, r1, [r0, #255]536; CHECK-ARMV7-STRICT-NEXT:    strd r0, r1, [r2, #255]537; CHECK-ARMV7-STRICT-NEXT:    bx lr538;539; CHECK-ARMV6-LABEL: test_offset_1:540; CHECK-ARMV6:       @ %bb.0: @ %entry541; CHECK-ARMV6-NEXT:    ldr r0, .LCPI4_0542; CHECK-ARMV6-NEXT:    ldr r2, .LCPI4_1543; CHECK-ARMV6-NEXT:    ldrd r0, r1, [r0, #255]544; CHECK-ARMV6-NEXT:    strd r0, r1, [r2, #255]545; CHECK-ARMV6-NEXT:    bx lr546; CHECK-ARMV6-NEXT:    .p2align 2547; CHECK-ARMV6-NEXT:  @ %bb.1:548; CHECK-ARMV6-NEXT:  .LCPI4_0:549; CHECK-ARMV6-NEXT:    .long x550; CHECK-ARMV6-NEXT:  .LCPI4_1:551; CHECK-ARMV6-NEXT:    .long y552;553; CHECK-ARMV6-STRICT-LABEL: test_offset_1:554; CHECK-ARMV6-STRICT:       @ %bb.0: @ %entry555; CHECK-ARMV6-STRICT-NEXT:    ldr r0, .LCPI4_0556; CHECK-ARMV6-STRICT-NEXT:    ldr r2, .LCPI4_1557; CHECK-ARMV6-STRICT-NEXT:    ldrd r0, r1, [r0, #255]558; CHECK-ARMV6-STRICT-NEXT:    strd r0, r1, [r2, #255]559; CHECK-ARMV6-STRICT-NEXT:    bx lr560; CHECK-ARMV6-STRICT-NEXT:    .p2align 2561; CHECK-ARMV6-STRICT-NEXT:  @ %bb.1:562; CHECK-ARMV6-STRICT-NEXT:  .LCPI4_0:563; CHECK-ARMV6-STRICT-NEXT:    .long x564; CHECK-ARMV6-STRICT-NEXT:  .LCPI4_1:565; CHECK-ARMV6-STRICT-NEXT:    .long y566 567entry:568  %0 = load volatile i64, ptr getelementptr (i8, ptr @x, i32 255), align 8569  store volatile i64 %0, ptr getelementptr (i8, ptr @y, i32 255), align 8570  ret void571}572 573define void @test_offset_2() {574; CHECK-ARMV5TE-LABEL: test_offset_2:575; CHECK-ARMV5TE:       @ %bb.0: @ %entry576; CHECK-ARMV5TE-NEXT:    ldr r0, .LCPI5_0577; CHECK-ARMV5TE-NEXT:    ldr r2, .LCPI5_1578; CHECK-ARMV5TE-NEXT:    add r0, r0, #256579; CHECK-ARMV5TE-NEXT:    add r2, r2, #256580; CHECK-ARMV5TE-NEXT:    ldrd r0, r1, [r0]581; CHECK-ARMV5TE-NEXT:    strd r0, r1, [r2]582; CHECK-ARMV5TE-NEXT:    bx lr583; CHECK-ARMV5TE-NEXT:    .p2align 2584; CHECK-ARMV5TE-NEXT:  @ %bb.1:585; CHECK-ARMV5TE-NEXT:  .LCPI5_0:586; CHECK-ARMV5TE-NEXT:    .long x587; CHECK-ARMV5TE-NEXT:  .LCPI5_1:588; CHECK-ARMV5TE-NEXT:    .long y589;590; CHECK-T2-LABEL: test_offset_2:591; CHECK-T2:       @ %bb.0: @ %entry592; CHECK-T2-NEXT:    movw r0, :lower16:x593; CHECK-T2-NEXT:    movw r2, :lower16:y594; CHECK-T2-NEXT:    movt r0, :upper16:x595; CHECK-T2-NEXT:    movt r2, :upper16:y596; CHECK-T2-NEXT:    ldrd r0, r1, [r0, #256]597; CHECK-T2-NEXT:    strd r0, r1, [r2, #256]598; CHECK-T2-NEXT:    bx lr599;600; CHECK-ARMV4T-LABEL: test_offset_2:601; CHECK-ARMV4T:       @ %bb.0: @ %entry602; CHECK-ARMV4T-NEXT:    ldr r0, .LCPI5_0603; CHECK-ARMV4T-NEXT:    ldr r2, .LCPI5_1604; CHECK-ARMV4T-NEXT:    ldr r1, [r0, #256]605; CHECK-ARMV4T-NEXT:    ldr r0, [r0, #260]606; CHECK-ARMV4T-NEXT:    str r0, [r2, #260]607; CHECK-ARMV4T-NEXT:    str r1, [r2, #256]608; CHECK-ARMV4T-NEXT:    bx lr609; CHECK-ARMV4T-NEXT:    .p2align 2610; CHECK-ARMV4T-NEXT:  @ %bb.1:611; CHECK-ARMV4T-NEXT:  .LCPI5_0:612; CHECK-ARMV4T-NEXT:    .long x613; CHECK-ARMV4T-NEXT:  .LCPI5_1:614; CHECK-ARMV4T-NEXT:    .long y615;616; CHECK-ARMV7-LABEL: test_offset_2:617; CHECK-ARMV7:       @ %bb.0: @ %entry618; CHECK-ARMV7-NEXT:    movw r0, :lower16:x619; CHECK-ARMV7-NEXT:    movw r2, :lower16:y620; CHECK-ARMV7-NEXT:    movt r0, :upper16:x621; CHECK-ARMV7-NEXT:    movt r2, :upper16:y622; CHECK-ARMV7-NEXT:    add r0, r0, #256623; CHECK-ARMV7-NEXT:    add r2, r2, #256624; CHECK-ARMV7-NEXT:    ldrd r0, r1, [r0]625; CHECK-ARMV7-NEXT:    strd r0, r1, [r2]626; CHECK-ARMV7-NEXT:    bx lr627;628; CHECK-ARMV7-STRICT-LABEL: test_offset_2:629; CHECK-ARMV7-STRICT:       @ %bb.0: @ %entry630; CHECK-ARMV7-STRICT-NEXT:    movw r0, :lower16:x631; CHECK-ARMV7-STRICT-NEXT:    movw r2, :lower16:y632; CHECK-ARMV7-STRICT-NEXT:    movt r0, :upper16:x633; CHECK-ARMV7-STRICT-NEXT:    movt r2, :upper16:y634; CHECK-ARMV7-STRICT-NEXT:    add r0, r0, #256635; CHECK-ARMV7-STRICT-NEXT:    add r2, r2, #256636; CHECK-ARMV7-STRICT-NEXT:    ldrd r0, r1, [r0]637; CHECK-ARMV7-STRICT-NEXT:    strd r0, r1, [r2]638; CHECK-ARMV7-STRICT-NEXT:    bx lr639;640; CHECK-ARMV6-LABEL: test_offset_2:641; CHECK-ARMV6:       @ %bb.0: @ %entry642; CHECK-ARMV6-NEXT:    ldr r0, .LCPI5_0643; CHECK-ARMV6-NEXT:    ldr r2, .LCPI5_1644; CHECK-ARMV6-NEXT:    add r0, r0, #256645; CHECK-ARMV6-NEXT:    add r2, r2, #256646; CHECK-ARMV6-NEXT:    ldrd r0, r1, [r0]647; CHECK-ARMV6-NEXT:    strd r0, r1, [r2]648; CHECK-ARMV6-NEXT:    bx lr649; CHECK-ARMV6-NEXT:    .p2align 2650; CHECK-ARMV6-NEXT:  @ %bb.1:651; CHECK-ARMV6-NEXT:  .LCPI5_0:652; CHECK-ARMV6-NEXT:    .long x653; CHECK-ARMV6-NEXT:  .LCPI5_1:654; CHECK-ARMV6-NEXT:    .long y655;656; CHECK-ARMV6-STRICT-LABEL: test_offset_2:657; CHECK-ARMV6-STRICT:       @ %bb.0: @ %entry658; CHECK-ARMV6-STRICT-NEXT:    ldr r0, .LCPI5_0659; CHECK-ARMV6-STRICT-NEXT:    ldr r2, .LCPI5_1660; CHECK-ARMV6-STRICT-NEXT:    add r0, r0, #256661; CHECK-ARMV6-STRICT-NEXT:    add r2, r2, #256662; CHECK-ARMV6-STRICT-NEXT:    ldrd r0, r1, [r0]663; CHECK-ARMV6-STRICT-NEXT:    strd r0, r1, [r2]664; CHECK-ARMV6-STRICT-NEXT:    bx lr665; CHECK-ARMV6-STRICT-NEXT:    .p2align 2666; CHECK-ARMV6-STRICT-NEXT:  @ %bb.1:667; CHECK-ARMV6-STRICT-NEXT:  .LCPI5_0:668; CHECK-ARMV6-STRICT-NEXT:    .long x669; CHECK-ARMV6-STRICT-NEXT:  .LCPI5_1:670; CHECK-ARMV6-STRICT-NEXT:    .long y671 672entry:673  %0 = load volatile i64, ptr getelementptr (i8, ptr @x, i32 256), align 8674  store volatile i64 %0, ptr getelementptr (i8, ptr @y, i32 256), align 8675  ret void676}677 678define void @test_offset_3() {679; CHECK-ARMV5TE-LABEL: test_offset_3:680; CHECK-ARMV5TE:       @ %bb.0: @ %entry681; CHECK-ARMV5TE-NEXT:    ldr r0, .LCPI6_0682; CHECK-ARMV5TE-NEXT:    ldr r2, .LCPI6_1683; CHECK-ARMV5TE-NEXT:    add r0, r0, #1020684; CHECK-ARMV5TE-NEXT:    add r2, r2, #1020685; CHECK-ARMV5TE-NEXT:    ldrd r0, r1, [r0]686; CHECK-ARMV5TE-NEXT:    strd r0, r1, [r2]687; CHECK-ARMV5TE-NEXT:    bx lr688; CHECK-ARMV5TE-NEXT:    .p2align 2689; CHECK-ARMV5TE-NEXT:  @ %bb.1:690; CHECK-ARMV5TE-NEXT:  .LCPI6_0:691; CHECK-ARMV5TE-NEXT:    .long x692; CHECK-ARMV5TE-NEXT:  .LCPI6_1:693; CHECK-ARMV5TE-NEXT:    .long y694;695; CHECK-T2-LABEL: test_offset_3:696; CHECK-T2:       @ %bb.0: @ %entry697; CHECK-T2-NEXT:    movw r0, :lower16:x698; CHECK-T2-NEXT:    movw r2, :lower16:y699; CHECK-T2-NEXT:    movt r0, :upper16:x700; CHECK-T2-NEXT:    movt r2, :upper16:y701; CHECK-T2-NEXT:    ldrd r0, r1, [r0, #1020]702; CHECK-T2-NEXT:    strd r0, r1, [r2, #1020]703; CHECK-T2-NEXT:    bx lr704;705; CHECK-ARMV4T-LABEL: test_offset_3:706; CHECK-ARMV4T:       @ %bb.0: @ %entry707; CHECK-ARMV4T-NEXT:    ldr r0, .LCPI6_0708; CHECK-ARMV4T-NEXT:    ldr r2, .LCPI6_1709; CHECK-ARMV4T-NEXT:    ldr r1, [r0, #1020]710; CHECK-ARMV4T-NEXT:    ldr r0, [r0, #1024]711; CHECK-ARMV4T-NEXT:    str r0, [r2, #1024]712; CHECK-ARMV4T-NEXT:    str r1, [r2, #1020]713; CHECK-ARMV4T-NEXT:    bx lr714; CHECK-ARMV4T-NEXT:    .p2align 2715; CHECK-ARMV4T-NEXT:  @ %bb.1:716; CHECK-ARMV4T-NEXT:  .LCPI6_0:717; CHECK-ARMV4T-NEXT:    .long x718; CHECK-ARMV4T-NEXT:  .LCPI6_1:719; CHECK-ARMV4T-NEXT:    .long y720;721; CHECK-ARMV7-LABEL: test_offset_3:722; CHECK-ARMV7:       @ %bb.0: @ %entry723; CHECK-ARMV7-NEXT:    movw r0, :lower16:x724; CHECK-ARMV7-NEXT:    movw r2, :lower16:y725; CHECK-ARMV7-NEXT:    movt r0, :upper16:x726; CHECK-ARMV7-NEXT:    movt r2, :upper16:y727; CHECK-ARMV7-NEXT:    add r0, r0, #1020728; CHECK-ARMV7-NEXT:    add r2, r2, #1020729; CHECK-ARMV7-NEXT:    ldrd r0, r1, [r0]730; CHECK-ARMV7-NEXT:    strd r0, r1, [r2]731; CHECK-ARMV7-NEXT:    bx lr732;733; CHECK-ARMV7-STRICT-LABEL: test_offset_3:734; CHECK-ARMV7-STRICT:       @ %bb.0: @ %entry735; CHECK-ARMV7-STRICT-NEXT:    movw r0, :lower16:x736; CHECK-ARMV7-STRICT-NEXT:    movw r2, :lower16:y737; CHECK-ARMV7-STRICT-NEXT:    movt r0, :upper16:x738; CHECK-ARMV7-STRICT-NEXT:    movt r2, :upper16:y739; CHECK-ARMV7-STRICT-NEXT:    add r0, r0, #1020740; CHECK-ARMV7-STRICT-NEXT:    add r2, r2, #1020741; CHECK-ARMV7-STRICT-NEXT:    ldrd r0, r1, [r0]742; CHECK-ARMV7-STRICT-NEXT:    strd r0, r1, [r2]743; CHECK-ARMV7-STRICT-NEXT:    bx lr744;745; CHECK-ARMV6-LABEL: test_offset_3:746; CHECK-ARMV6:       @ %bb.0: @ %entry747; CHECK-ARMV6-NEXT:    ldr r0, .LCPI6_0748; CHECK-ARMV6-NEXT:    ldr r2, .LCPI6_1749; CHECK-ARMV6-NEXT:    add r0, r0, #1020750; CHECK-ARMV6-NEXT:    add r2, r2, #1020751; CHECK-ARMV6-NEXT:    ldrd r0, r1, [r0]752; CHECK-ARMV6-NEXT:    strd r0, r1, [r2]753; CHECK-ARMV6-NEXT:    bx lr754; CHECK-ARMV6-NEXT:    .p2align 2755; CHECK-ARMV6-NEXT:  @ %bb.1:756; CHECK-ARMV6-NEXT:  .LCPI6_0:757; CHECK-ARMV6-NEXT:    .long x758; CHECK-ARMV6-NEXT:  .LCPI6_1:759; CHECK-ARMV6-NEXT:    .long y760;761; CHECK-ARMV6-STRICT-LABEL: test_offset_3:762; CHECK-ARMV6-STRICT:       @ %bb.0: @ %entry763; CHECK-ARMV6-STRICT-NEXT:    ldr r0, .LCPI6_0764; CHECK-ARMV6-STRICT-NEXT:    ldr r2, .LCPI6_1765; CHECK-ARMV6-STRICT-NEXT:    add r0, r0, #1020766; CHECK-ARMV6-STRICT-NEXT:    add r2, r2, #1020767; CHECK-ARMV6-STRICT-NEXT:    ldrd r0, r1, [r0]768; CHECK-ARMV6-STRICT-NEXT:    strd r0, r1, [r2]769; CHECK-ARMV6-STRICT-NEXT:    bx lr770; CHECK-ARMV6-STRICT-NEXT:    .p2align 2771; CHECK-ARMV6-STRICT-NEXT:  @ %bb.1:772; CHECK-ARMV6-STRICT-NEXT:  .LCPI6_0:773; CHECK-ARMV6-STRICT-NEXT:    .long x774; CHECK-ARMV6-STRICT-NEXT:  .LCPI6_1:775; CHECK-ARMV6-STRICT-NEXT:    .long y776 777entry:778  %0 = load volatile i64, ptr getelementptr (i8, ptr @x, i32 1020), align 8779  store volatile i64 %0, ptr getelementptr (i8, ptr @y, i32 1020), align 8780  ret void781}782 783define void @test_offset_4() {784; CHECK-ARMV5TE-LABEL: test_offset_4:785; CHECK-ARMV5TE:       @ %bb.0: @ %entry786; CHECK-ARMV5TE-NEXT:    ldr r0, .LCPI7_0787; CHECK-ARMV5TE-NEXT:    ldr r2, .LCPI7_1788; CHECK-ARMV5TE-NEXT:    add r0, r0, #1024789; CHECK-ARMV5TE-NEXT:    add r2, r2, #1024790; CHECK-ARMV5TE-NEXT:    ldrd r0, r1, [r0]791; CHECK-ARMV5TE-NEXT:    strd r0, r1, [r2]792; CHECK-ARMV5TE-NEXT:    bx lr793; CHECK-ARMV5TE-NEXT:    .p2align 2794; CHECK-ARMV5TE-NEXT:  @ %bb.1:795; CHECK-ARMV5TE-NEXT:  .LCPI7_0:796; CHECK-ARMV5TE-NEXT:    .long x797; CHECK-ARMV5TE-NEXT:  .LCPI7_1:798; CHECK-ARMV5TE-NEXT:    .long y799;800; CHECK-T2-LABEL: test_offset_4:801; CHECK-T2:       @ %bb.0: @ %entry802; CHECK-T2-NEXT:    movw r0, :lower16:y803; CHECK-T2-NEXT:    movw r1, :lower16:x804; CHECK-T2-NEXT:    movt r0, :upper16:y805; CHECK-T2-NEXT:    movt r1, :upper16:x806; CHECK-T2-NEXT:    add.w r1, r1, #1024807; CHECK-T2-NEXT:    add.w r0, r0, #1024808; CHECK-T2-NEXT:    ldrd r1, r2, [r1]809; CHECK-T2-NEXT:    strd r1, r2, [r0]810; CHECK-T2-NEXT:    bx lr811;812; CHECK-ARMV4T-LABEL: test_offset_4:813; CHECK-ARMV4T:       @ %bb.0: @ %entry814; CHECK-ARMV4T-NEXT:    ldr r0, .LCPI7_0815; CHECK-ARMV4T-NEXT:    ldr r2, .LCPI7_1816; CHECK-ARMV4T-NEXT:    ldr r1, [r0, #1024]817; CHECK-ARMV4T-NEXT:    ldr r0, [r0, #1028]818; CHECK-ARMV4T-NEXT:    str r0, [r2, #1028]819; CHECK-ARMV4T-NEXT:    str r1, [r2, #1024]820; CHECK-ARMV4T-NEXT:    bx lr821; CHECK-ARMV4T-NEXT:    .p2align 2822; CHECK-ARMV4T-NEXT:  @ %bb.1:823; CHECK-ARMV4T-NEXT:  .LCPI7_0:824; CHECK-ARMV4T-NEXT:    .long x825; CHECK-ARMV4T-NEXT:  .LCPI7_1:826; CHECK-ARMV4T-NEXT:    .long y827;828; CHECK-ARMV7-LABEL: test_offset_4:829; CHECK-ARMV7:       @ %bb.0: @ %entry830; CHECK-ARMV7-NEXT:    movw r0, :lower16:x831; CHECK-ARMV7-NEXT:    movw r2, :lower16:y832; CHECK-ARMV7-NEXT:    movt r0, :upper16:x833; CHECK-ARMV7-NEXT:    movt r2, :upper16:y834; CHECK-ARMV7-NEXT:    add r0, r0, #1024835; CHECK-ARMV7-NEXT:    add r2, r2, #1024836; CHECK-ARMV7-NEXT:    ldrd r0, r1, [r0]837; CHECK-ARMV7-NEXT:    strd r0, r1, [r2]838; CHECK-ARMV7-NEXT:    bx lr839;840; CHECK-ARMV7-STRICT-LABEL: test_offset_4:841; CHECK-ARMV7-STRICT:       @ %bb.0: @ %entry842; CHECK-ARMV7-STRICT-NEXT:    movw r0, :lower16:x843; CHECK-ARMV7-STRICT-NEXT:    movw r2, :lower16:y844; CHECK-ARMV7-STRICT-NEXT:    movt r0, :upper16:x845; CHECK-ARMV7-STRICT-NEXT:    movt r2, :upper16:y846; CHECK-ARMV7-STRICT-NEXT:    add r0, r0, #1024847; CHECK-ARMV7-STRICT-NEXT:    add r2, r2, #1024848; CHECK-ARMV7-STRICT-NEXT:    ldrd r0, r1, [r0]849; CHECK-ARMV7-STRICT-NEXT:    strd r0, r1, [r2]850; CHECK-ARMV7-STRICT-NEXT:    bx lr851;852; CHECK-ARMV6-LABEL: test_offset_4:853; CHECK-ARMV6:       @ %bb.0: @ %entry854; CHECK-ARMV6-NEXT:    ldr r0, .LCPI7_0855; CHECK-ARMV6-NEXT:    ldr r2, .LCPI7_1856; CHECK-ARMV6-NEXT:    add r0, r0, #1024857; CHECK-ARMV6-NEXT:    add r2, r2, #1024858; CHECK-ARMV6-NEXT:    ldrd r0, r1, [r0]859; CHECK-ARMV6-NEXT:    strd r0, r1, [r2]860; CHECK-ARMV6-NEXT:    bx lr861; CHECK-ARMV6-NEXT:    .p2align 2862; CHECK-ARMV6-NEXT:  @ %bb.1:863; CHECK-ARMV6-NEXT:  .LCPI7_0:864; CHECK-ARMV6-NEXT:    .long x865; CHECK-ARMV6-NEXT:  .LCPI7_1:866; CHECK-ARMV6-NEXT:    .long y867;868; CHECK-ARMV6-STRICT-LABEL: test_offset_4:869; CHECK-ARMV6-STRICT:       @ %bb.0: @ %entry870; CHECK-ARMV6-STRICT-NEXT:    ldr r0, .LCPI7_0871; CHECK-ARMV6-STRICT-NEXT:    ldr r2, .LCPI7_1872; CHECK-ARMV6-STRICT-NEXT:    add r0, r0, #1024873; CHECK-ARMV6-STRICT-NEXT:    add r2, r2, #1024874; CHECK-ARMV6-STRICT-NEXT:    ldrd r0, r1, [r0]875; CHECK-ARMV6-STRICT-NEXT:    strd r0, r1, [r2]876; CHECK-ARMV6-STRICT-NEXT:    bx lr877; CHECK-ARMV6-STRICT-NEXT:    .p2align 2878; CHECK-ARMV6-STRICT-NEXT:  @ %bb.1:879; CHECK-ARMV6-STRICT-NEXT:  .LCPI7_0:880; CHECK-ARMV6-STRICT-NEXT:    .long x881; CHECK-ARMV6-STRICT-NEXT:  .LCPI7_1:882; CHECK-ARMV6-STRICT-NEXT:    .long y883 884entry:885  %0 = load volatile i64, ptr getelementptr (i8, ptr @x, i32 1024), align 8886  store volatile i64 %0, ptr getelementptr (i8, ptr @y, i32 1024), align 8887  ret void888}889 890define i64 @test_stack() {891; CHECK-ARMV5TE-LABEL: test_stack:892; CHECK-ARMV5TE:       @ %bb.0: @ %entry893; CHECK-ARMV5TE-NEXT:    .pad #80894; CHECK-ARMV5TE-NEXT:    sub sp, sp, #80895; CHECK-ARMV5TE-NEXT:    mov r1, #0896; CHECK-ARMV5TE-NEXT:    mov r0, #1897; CHECK-ARMV5TE-NEXT:    strd r0, r1, [sp, #8]898; CHECK-ARMV5TE-NEXT:    ldrd r0, r1, [sp, #8]899; CHECK-ARMV5TE-NEXT:    add sp, sp, #80900; CHECK-ARMV5TE-NEXT:    bx lr901;902; CHECK-T2-LABEL: test_stack:903; CHECK-T2:       @ %bb.0: @ %entry904; CHECK-T2-NEXT:    .pad #80905; CHECK-T2-NEXT:    sub sp, #80906; CHECK-T2-NEXT:    movs r0, #0907; CHECK-T2-NEXT:    movs r1, #1908; CHECK-T2-NEXT:    strd r1, r0, [sp, #8]909; CHECK-T2-NEXT:    ldrd r0, r1, [sp, #8]910; CHECK-T2-NEXT:    add sp, #80911; CHECK-T2-NEXT:    bx lr912;913; CHECK-ARMV4T-LABEL: test_stack:914; CHECK-ARMV4T:       @ %bb.0: @ %entry915; CHECK-ARMV4T-NEXT:    .pad #80916; CHECK-ARMV4T-NEXT:    sub sp, sp, #80917; CHECK-ARMV4T-NEXT:    mov r0, #0918; CHECK-ARMV4T-NEXT:    str r0, [sp, #12]919; CHECK-ARMV4T-NEXT:    mov r0, #1920; CHECK-ARMV4T-NEXT:    str r0, [sp, #8]921; CHECK-ARMV4T-NEXT:    ldr r0, [sp, #8]922; CHECK-ARMV4T-NEXT:    ldr r1, [sp, #12]923; CHECK-ARMV4T-NEXT:    add sp, sp, #80924; CHECK-ARMV4T-NEXT:    bx lr925;926; CHECK-ARMV7-LABEL: test_stack:927; CHECK-ARMV7:       @ %bb.0: @ %entry928; CHECK-ARMV7-NEXT:    .pad #80929; CHECK-ARMV7-NEXT:    sub sp, sp, #80930; CHECK-ARMV7-NEXT:    mov r1, #0931; CHECK-ARMV7-NEXT:    mov r0, #1932; CHECK-ARMV7-NEXT:    strd r0, r1, [sp, #8]933; CHECK-ARMV7-NEXT:    ldrd r0, r1, [sp, #8]934; CHECK-ARMV7-NEXT:    add sp, sp, #80935; CHECK-ARMV7-NEXT:    bx lr936;937; CHECK-ARMV7-STRICT-LABEL: test_stack:938; CHECK-ARMV7-STRICT:       @ %bb.0: @ %entry939; CHECK-ARMV7-STRICT-NEXT:    .pad #80940; CHECK-ARMV7-STRICT-NEXT:    sub sp, sp, #80941; CHECK-ARMV7-STRICT-NEXT:    mov r1, #0942; CHECK-ARMV7-STRICT-NEXT:    mov r0, #1943; CHECK-ARMV7-STRICT-NEXT:    strd r0, r1, [sp, #8]944; CHECK-ARMV7-STRICT-NEXT:    ldrd r0, r1, [sp, #8]945; CHECK-ARMV7-STRICT-NEXT:    add sp, sp, #80946; CHECK-ARMV7-STRICT-NEXT:    bx lr947;948; CHECK-ARMV6-LABEL: test_stack:949; CHECK-ARMV6:       @ %bb.0: @ %entry950; CHECK-ARMV6-NEXT:    .pad #80951; CHECK-ARMV6-NEXT:    sub sp, sp, #80952; CHECK-ARMV6-NEXT:    mov r1, #0953; CHECK-ARMV6-NEXT:    mov r0, #1954; CHECK-ARMV6-NEXT:    strd r0, r1, [sp, #8]955; CHECK-ARMV6-NEXT:    ldrd r0, r1, [sp, #8]956; CHECK-ARMV6-NEXT:    add sp, sp, #80957; CHECK-ARMV6-NEXT:    bx lr958;959; CHECK-ARMV6-STRICT-LABEL: test_stack:960; CHECK-ARMV6-STRICT:       @ %bb.0: @ %entry961; CHECK-ARMV6-STRICT-NEXT:    .pad #80962; CHECK-ARMV6-STRICT-NEXT:    sub sp, sp, #80963; CHECK-ARMV6-STRICT-NEXT:    mov r1, #0964; CHECK-ARMV6-STRICT-NEXT:    mov r0, #1965; CHECK-ARMV6-STRICT-NEXT:    strd r0, r1, [sp, #8]966; CHECK-ARMV6-STRICT-NEXT:    ldrd r0, r1, [sp, #8]967; CHECK-ARMV6-STRICT-NEXT:    add sp, sp, #80968; CHECK-ARMV6-STRICT-NEXT:    bx lr969 970entry:971  %a = alloca [10 x i64], align 8972  %arrayidx = getelementptr inbounds [10 x i64], ptr %a, i32 0, i32 1973  store volatile i64 1, ptr %arrayidx, align 8974  %arrayidx1 = getelementptr inbounds [10 x i64], ptr %a, i32 0, i32 1975  %0 = load volatile i64, ptr %arrayidx1, align 8976  ret i64 %0977}978 979