brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · 8e93f3a Raw
275 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs < %s -mtriple=arm-eabi -mattr=v7,neon | FileCheck %s --check-prefixes=CHECK,CHECK-LE3; RUN: llc -verify-machineinstrs < %s -mtriple=armeb-eabi -mattr=v7,neon | FileCheck %s --check-prefixes=CHECK,CHECK-BE4 5@var32 = global i32 06@vardouble = global double 0.07 8define void @arg_longint( i64 %val ) {9; CHECK-LE-LABEL: arg_longint:10; CHECK-LE:       @ %bb.0:11; CHECK-LE-NEXT:    movw r1, :lower16:var3212; CHECK-LE-NEXT:    movt r1, :upper16:var3213; CHECK-LE-NEXT:    str r0, [r1]14; CHECK-LE-NEXT:    bx lr15;16; CHECK-BE-LABEL: arg_longint:17; CHECK-BE:       @ %bb.0:18; CHECK-BE-NEXT:    movw r0, :lower16:var3219; CHECK-BE-NEXT:    movt r0, :upper16:var3220; CHECK-BE-NEXT:    str r1, [r0]21; CHECK-BE-NEXT:    bx lr22   %tmp = trunc i64 %val to i3223   store i32 %tmp, ptr @var3224   ret void25}26 27define void @arg_double( double %val ) {28; CHECK-LABEL: arg_double:29; CHECK:       @ %bb.0:30; CHECK-NEXT:    movw r2, :lower16:vardouble31; CHECK-NEXT:    movt r2, :upper16:vardouble32; CHECK-NEXT:    strd r0, r1, [r2]33; CHECK-NEXT:    bx lr34    store double  %val, ptr @vardouble35    ret void36}37 38define void @arg_v4i32(<4 x i32> %vec ) {39; CHECK-LE-LABEL: arg_v4i32:40; CHECK-LE:       @ %bb.0:41; CHECK-LE-NEXT:    vmov d16, r0, r142; CHECK-LE-NEXT:    movw r0, :lower16:var3243; CHECK-LE-NEXT:    movt r0, :upper16:var3244; CHECK-LE-NEXT:    vst1.32 {d16[0]}, [r0:32]45; CHECK-LE-NEXT:    bx lr46;47; CHECK-BE-LABEL: arg_v4i32:48; CHECK-BE:       @ %bb.0:49; CHECK-BE-NEXT:    vmov d16, r1, r050; CHECK-BE-NEXT:    movw r0, :lower16:var3251; CHECK-BE-NEXT:    movt r0, :upper16:var3252; CHECK-BE-NEXT:    vrev64.32 q8, q853; CHECK-BE-NEXT:    vst1.32 {d16[0]}, [r0:32]54; CHECK-BE-NEXT:    bx lr55    %tmp = extractelement <4 x i32> %vec, i32 056    store i32 %tmp, ptr @var3257    ret void58}59 60define void @arg_v2f64(<2 x double> %vec ) {61; CHECK-LABEL: arg_v2f64:62; CHECK:       @ %bb.0:63; CHECK-NEXT:    movw r2, :lower16:vardouble64; CHECK-NEXT:    movt r2, :upper16:vardouble65; CHECK-NEXT:    strd r0, r1, [r2]66; CHECK-NEXT:    bx lr67    %tmp = extractelement <2 x double> %vec, i32 068    store double %tmp, ptr @vardouble69    ret void70}71 72define i64 @return_longint() {73; CHECK-LE-LABEL: return_longint:74; CHECK-LE:       @ %bb.0:75; CHECK-LE-NEXT:    mov r0, #4276; CHECK-LE-NEXT:    mov r1, #077; CHECK-LE-NEXT:    bx lr78;79; CHECK-BE-LABEL: return_longint:80; CHECK-BE:       @ %bb.0:81; CHECK-BE-NEXT:    mov r0, #082; CHECK-BE-NEXT:    mov r1, #4283; CHECK-BE-NEXT:    bx lr84    ret i64 4285}86 87define double @return_double() {88; CHECK-LE-LABEL: return_double:89; CHECK-LE:       @ %bb.0:90; CHECK-LE-NEXT:    vmov.f64 d16, #1.000000e+0091; CHECK-LE-NEXT:    vmov r0, r1, d1692; CHECK-LE-NEXT:    bx lr93;94; CHECK-BE-LABEL: return_double:95; CHECK-BE:       @ %bb.0:96; CHECK-BE-NEXT:    vmov.f64 d16, #1.000000e+0097; CHECK-BE-NEXT:    vmov r1, r0, d1698; CHECK-BE-NEXT:    bx lr99    ret double 1.0100}101 102define <4 x i32> @return_v4i32() {103; CHECK-LABEL: return_v4i32:104; CHECK:       @ %bb.0:105; CHECK-NEXT:    mov r0, #42106; CHECK-NEXT:    mov r1, #43107; CHECK-NEXT:    mov r2, #44108; CHECK-NEXT:    mov r3, #45109; CHECK-NEXT:    bx lr110   ret < 4 x i32> < i32 42, i32 43, i32 44, i32 45 >111}112 113define <2 x double> @return_v2f64() {114; CHECK-LE-LABEL: return_v2f64:115; CHECK-LE:       @ %bb.0:116; CHECK-LE-NEXT:    vldr d16, .LCPI7_0117; CHECK-LE-NEXT:    vldr d17, .LCPI7_1118; CHECK-LE-NEXT:    vmov r0, r1, d16119; CHECK-LE-NEXT:    vmov r2, r3, d17120; CHECK-LE-NEXT:    bx lr121; CHECK-LE-NEXT:    .p2align 3122; CHECK-LE-NEXT:  @ %bb.1:123; CHECK-LE-NEXT:  .LCPI7_0:124; CHECK-LE-NEXT:    .long 1374389535 @ double 3.1400000000000001125; CHECK-LE-NEXT:    .long 1074339512126; CHECK-LE-NEXT:  .LCPI7_1:127; CHECK-LE-NEXT:    .long 1374389535 @ double 6.2800000000000002128; CHECK-LE-NEXT:    .long 1075388088129;130; CHECK-BE-LABEL: return_v2f64:131; CHECK-BE:       @ %bb.0:132; CHECK-BE-NEXT:    vldr d16, .LCPI7_0133; CHECK-BE-NEXT:    vldr d17, .LCPI7_1134; CHECK-BE-NEXT:    vmov r1, r0, d16135; CHECK-BE-NEXT:    vmov r3, r2, d17136; CHECK-BE-NEXT:    bx lr137; CHECK-BE-NEXT:    .p2align 3138; CHECK-BE-NEXT:  @ %bb.1:139; CHECK-BE-NEXT:  .LCPI7_0:140; CHECK-BE-NEXT:    .long 1074339512 @ double 3.1400000000000001141; CHECK-BE-NEXT:    .long 1374389535142; CHECK-BE-NEXT:  .LCPI7_1:143; CHECK-BE-NEXT:    .long 1075388088 @ double 6.2800000000000002144; CHECK-BE-NEXT:    .long 1374389535145   ret <2 x double> < double 3.14, double 6.28 >146}147 148define void @caller_arg_longint() {149; CHECK-LE-LABEL: caller_arg_longint:150; CHECK-LE:       @ %bb.0:151; CHECK-LE-NEXT:    .save {r11, lr}152; CHECK-LE-NEXT:    push {r11, lr}153; CHECK-LE-NEXT:    mov r0, #42154; CHECK-LE-NEXT:    mov r1, #0155; CHECK-LE-NEXT:    bl arg_longint156; CHECK-LE-NEXT:    pop {r11, pc}157;158; CHECK-BE-LABEL: caller_arg_longint:159; CHECK-BE:       @ %bb.0:160; CHECK-BE-NEXT:    .save {r11, lr}161; CHECK-BE-NEXT:    push {r11, lr}162; CHECK-BE-NEXT:    mov r0, #0163; CHECK-BE-NEXT:    mov r1, #42164; CHECK-BE-NEXT:    bl arg_longint165; CHECK-BE-NEXT:    pop {r11, pc}166   call void @arg_longint( i64 42 )167   ret void168}169 170define void @caller_arg_double() {171; CHECK-LE-LABEL: caller_arg_double:172; CHECK-LE:       @ %bb.0:173; CHECK-LE-NEXT:    .save {r11, lr}174; CHECK-LE-NEXT:    push {r11, lr}175; CHECK-LE-NEXT:    vmov.f64 d16, #1.000000e+00176; CHECK-LE-NEXT:    vmov r0, r1, d16177; CHECK-LE-NEXT:    bl arg_double178; CHECK-LE-NEXT:    pop {r11, pc}179;180; CHECK-BE-LABEL: caller_arg_double:181; CHECK-BE:       @ %bb.0:182; CHECK-BE-NEXT:    .save {r11, lr}183; CHECK-BE-NEXT:    push {r11, lr}184; CHECK-BE-NEXT:    vmov.f64 d16, #1.000000e+00185; CHECK-BE-NEXT:    vmov r1, r0, d16186; CHECK-BE-NEXT:    bl arg_double187; CHECK-BE-NEXT:    pop {r11, pc}188   call void @arg_double( double 1.0 )189   ret void190}191 192define void @caller_return_longint() {193; CHECK-LE-LABEL: caller_return_longint:194; CHECK-LE:       @ %bb.0:195; CHECK-LE-NEXT:    .save {r11, lr}196; CHECK-LE-NEXT:    push {r11, lr}197; CHECK-LE-NEXT:    bl return_longint198; CHECK-LE-NEXT:    movw r1, :lower16:var32199; CHECK-LE-NEXT:    movt r1, :upper16:var32200; CHECK-LE-NEXT:    str r0, [r1]201; CHECK-LE-NEXT:    pop {r11, pc}202;203; CHECK-BE-LABEL: caller_return_longint:204; CHECK-BE:       @ %bb.0:205; CHECK-BE-NEXT:    .save {r11, lr}206; CHECK-BE-NEXT:    push {r11, lr}207; CHECK-BE-NEXT:    bl return_longint208; CHECK-BE-NEXT:    movw r0, :lower16:var32209; CHECK-BE-NEXT:    movt r0, :upper16:var32210; CHECK-BE-NEXT:    str r1, [r0]211; CHECK-BE-NEXT:    pop {r11, pc}212   %val = call i64 @return_longint()213   %tmp = trunc i64 %val to i32214   store i32 %tmp, ptr @var32215   ret void216}217 218define void @caller_return_double() {219; CHECK-LE-LABEL: caller_return_double:220; CHECK-LE:       @ %bb.0:221; CHECK-LE-NEXT:    .save {r11, lr}222; CHECK-LE-NEXT:    push {r11, lr}223; CHECK-LE-NEXT:    bl return_double224; CHECK-LE-NEXT:    vmov d17, r0, r1225; CHECK-LE-NEXT:    vldr d16, .LCPI11_0226; CHECK-LE-NEXT:    movw r0, :lower16:vardouble227; CHECK-LE-NEXT:    vadd.f64 d16, d17, d16228; CHECK-LE-NEXT:    movt r0, :upper16:vardouble229; CHECK-LE-NEXT:    vstr d16, [r0]230; CHECK-LE-NEXT:    pop {r11, pc}231; CHECK-LE-NEXT:    .p2align 3232; CHECK-LE-NEXT:  @ %bb.1:233; CHECK-LE-NEXT:  .LCPI11_0:234; CHECK-LE-NEXT:    .long 1374389535 @ double 3.1400000000000001235; CHECK-LE-NEXT:    .long 1074339512236;237; CHECK-BE-LABEL: caller_return_double:238; CHECK-BE:       @ %bb.0:239; CHECK-BE-NEXT:    .save {r11, lr}240; CHECK-BE-NEXT:    push {r11, lr}241; CHECK-BE-NEXT:    bl return_double242; CHECK-BE-NEXT:    vmov d17, r1, r0243; CHECK-BE-NEXT:    vldr d16, .LCPI11_0244; CHECK-BE-NEXT:    movw r0, :lower16:vardouble245; CHECK-BE-NEXT:    vadd.f64 d16, d17, d16246; CHECK-BE-NEXT:    movt r0, :upper16:vardouble247; CHECK-BE-NEXT:    vstr d16, [r0]248; CHECK-BE-NEXT:    pop {r11, pc}249; CHECK-BE-NEXT:    .p2align 3250; CHECK-BE-NEXT:  @ %bb.1:251; CHECK-BE-NEXT:  .LCPI11_0:252; CHECK-BE-NEXT:    .long 1074339512 @ double 3.1400000000000001253; CHECK-BE-NEXT:    .long 1374389535254  %val = call double @return_double( )255  %tmp = fadd double %val, 3.14256  store double  %tmp, ptr @vardouble257  ret void258}259 260define void @caller_return_v2f64() {261; CHECK-LABEL: caller_return_v2f64:262; CHECK:       @ %bb.0:263; CHECK-NEXT:    .save {r11, lr}264; CHECK-NEXT:    push {r11, lr}265; CHECK-NEXT:    bl return_v2f64266; CHECK-NEXT:    movw r2, :lower16:vardouble267; CHECK-NEXT:    movt r2, :upper16:vardouble268; CHECK-NEXT:    strd r0, r1, [r2]269; CHECK-NEXT:    pop {r11, pc}270   %val = call <2 x double> @return_v2f64( )271   %tmp = extractelement <2 x double> %val, i32 0272    store double %tmp, ptr @vardouble273    ret void274}275