brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.7 KiB · 6ad1783 Raw
393 lines · plain
1; RUN: llc < %s -mtriple armeb-eabi -mattr v7,neon -float-abi soft -o - | FileCheck %s2; RUN: llc < %s -mtriple armeb-eabi -mattr v7,neon -float-abi hard -o - | FileCheck %s -check-prefix CHECK-HARD3 4@v2i64 = global <2 x i64> zeroinitializer5@v2i32 = global <2 x i32> zeroinitializer6@v4i32 = global <4 x i32> zeroinitializer7@v4i16 = global <4 x i16> zeroinitializer8@v8i16 = global <8 x i16> zeroinitializer9@v8i8 = global <8 x i8> zeroinitializer10@v16i8 = global <16 x i8> zeroinitializer11 12@v2f32 = global <2 x float> zeroinitializer13@v2f64 = global <2 x double> zeroinitializer14@v4f32 = global <4 x float> zeroinitializer15 16 17; 64 bit conversions18define void @conv_i64_to_v8i8( i64 %val,  ptr %store ) {19; CHECK-LABEL: conv_i64_to_v8i8:20; CHECK: vrev64.821  %v = bitcast i64 %val to <8 x i8>22  %w = load <8 x i8>, ptr @v8i823  %a = add <8 x i8> %v, %w24  store <8 x i8> %a, ptr %store25  ret void26}27 28define void @conv_v8i8_to_i64( ptr %load, ptr %store ) {29; CHECK-LABEL: conv_v8i8_to_i64:30; CHECK: vrev64.831  %v = load <8 x i8>, ptr %load32  %w = load <8 x i8>, ptr @v8i833  %a = add <8 x i8> %v, %w34  %f = bitcast <8 x i8> %a to i6435  call void @conv_i64_to_v8i8( i64 %f, ptr %store )36  ret void37}38 39define void @conv_i64_to_v4i16( i64 %val,  ptr %store ) {40; CHECK-LABEL: conv_i64_to_v4i16:41; CHECK: vrev64.1642  %v = bitcast i64 %val to <4 x i16>43  %w = load <4 x i16>, ptr @v4i1644  %a = add <4 x i16> %v, %w45  store <4 x i16> %a, ptr %store46  ret void47}48 49define void @conv_v4i16_to_i64( ptr %load, ptr %store ) {50; CHECK-LABEL: conv_v4i16_to_i64:51; CHECK: vrev64.1652  %v = load <4 x i16>, ptr %load53  %w = load <4 x i16>, ptr @v4i1654  %a = add <4 x i16> %v, %w55  %f = bitcast <4 x i16> %a to i6456  call void @conv_i64_to_v4i16( i64 %f, ptr %store )57  ret void58}59 60define void @conv_i64_to_v2i32( i64 %val,  ptr %store ) {61; CHECK-LABEL: conv_i64_to_v2i32:62; CHECK: vrev64.3263  %v = bitcast i64 %val to <2 x i32>64  %w = load <2 x i32>, ptr @v2i3265  %a = add <2 x i32> %v, %w66  store <2 x i32> %a, ptr %store67  ret void68}69 70define void @conv_v2i32_to_i64( ptr %load, ptr %store ) {71; CHECK-LABEL: conv_v2i32_to_i64:72; CHECK: vrev64.3273  %v = load <2 x i32>, ptr %load74  %w = load <2 x i32>, ptr @v2i3275  %a = add <2 x i32> %v, %w76  %f = bitcast <2 x i32> %a to i6477  call void @conv_i64_to_v2i32( i64 %f, ptr %store )78  ret void79}80 81define void @conv_i64_to_v2f32( i64 %val,  ptr %store ) {82; CHECK-LABEL: conv_i64_to_v2f32:83; CHECK: vrev64.3284  %v = bitcast i64 %val to <2 x float>85  %w = load <2 x float>, ptr @v2f3286  %a = fadd <2 x float> %v, %w87  store <2 x float> %a, ptr %store88  ret void89}90 91define void @conv_v2f32_to_i64( ptr %load, ptr %store ) {92; CHECK-LABEL: conv_v2f32_to_i64:93; CHECK: vrev64.3294  %v = load <2 x float>, ptr %load95  %w = load <2 x float>, ptr @v2f3296  %a = fadd <2 x float> %v, %w97  %f = bitcast <2 x float> %a to i6498  call void @conv_i64_to_v2f32( i64 %f, ptr %store )99  ret void100}101 102define void @conv_f64_to_v8i8( double %val,  ptr %store ) {103; CHECK-LABEL: conv_f64_to_v8i8:104; CHECK: vrev64.8105  %v = bitcast double %val to <8 x i8>106  %w = load <8 x i8>, ptr @v8i8107  %a = add <8 x i8> %v, %w108  store <8 x i8> %a, ptr %store109  ret void110}111 112define void @conv_v8i8_to_f64( ptr %load, ptr %store ) {113; CHECK-LABEL: conv_v8i8_to_f64:114; CHECK: vrev64.8115  %v = load <8 x i8>, ptr %load116  %w = load <8 x i8>, ptr @v8i8117  %a = add <8 x i8> %v, %w118  %f = bitcast <8 x i8> %a to double119  call void @conv_f64_to_v8i8( double %f, ptr %store )120  ret void121}122 123define void @conv_f64_to_v4i16( double %val,  ptr %store ) {124; CHECK-LABEL: conv_f64_to_v4i16:125; CHECK: vrev64.16126  %v = bitcast double %val to <4 x i16>127  %w = load <4 x i16>, ptr @v4i16128  %a = add <4 x i16> %v, %w129  store <4 x i16> %a, ptr %store130  ret void131}132 133define void @conv_v4i16_to_f64( ptr %load, ptr %store ) {134; CHECK-LABEL: conv_v4i16_to_f64:135; CHECK: vrev64.16136  %v = load <4 x i16>, ptr %load137  %w = load <4 x i16>, ptr @v4i16138  %a = add <4 x i16> %v, %w139  %f = bitcast <4 x i16> %a to double140  call void @conv_f64_to_v4i16( double %f, ptr %store )141  ret void142}143 144define void @conv_f64_to_v2i32( double %val,  ptr %store ) {145; CHECK-LABEL: conv_f64_to_v2i32:146; CHECK: vrev64.32147  %v = bitcast double %val to <2 x i32>148  %w = load <2 x i32>, ptr @v2i32149  %a = add <2 x i32> %v, %w150  store <2 x i32> %a, ptr %store151  ret void152}153 154define void @conv_v2i32_to_f64( ptr %load, ptr %store ) {155; CHECK-LABEL: conv_v2i32_to_f64:156; CHECK: vrev64.32157  %v = load <2 x i32>, ptr %load158  %w = load <2 x i32>, ptr @v2i32159  %a = add <2 x i32> %v, %w160  %f = bitcast <2 x i32> %a to double161  call void @conv_f64_to_v2i32( double %f, ptr %store )162  ret void163}164 165define void @conv_f64_to_v2f32( double %val,  ptr %store ) {166; CHECK-LABEL: conv_f64_to_v2f32:167; CHECK: vrev64.32168  %v = bitcast double %val to <2 x float>169  %w = load <2 x float>, ptr @v2f32170  %a = fadd <2 x float> %v, %w171  store <2 x float> %a, ptr %store172  ret void173}174 175define void @conv_v2f32_to_f64( ptr %load, ptr %store ) {176; CHECK-LABEL: conv_v2f32_to_f64:177; CHECK: vrev64.32178  %v = load <2 x float>, ptr %load179  %w = load <2 x float>, ptr @v2f32180  %a = fadd <2 x float> %v, %w181  %f = bitcast <2 x float> %a to double182  call void @conv_f64_to_v2f32( double %f, ptr %store )183  ret void184}185 186; 128 bit conversions187 188 189define void @conv_i128_to_v16i8( i128 %val,  ptr %store ) {190; CHECK-LABEL: conv_i128_to_v16i8:191; CHECK: vrev32.8192  %v = bitcast i128 %val to <16 x i8>193  %w = load  <16 x i8>,  ptr @v16i8194  %a = add <16 x i8> %v, %w195  store <16 x i8> %a, ptr %store196  ret void197}198 199define void @conv_v16i8_to_i128( ptr %load, ptr %store ) {200; CHECK-LABEL: conv_v16i8_to_i128:201; CHECK: vrev32.8202  %v = load <16 x i8>, ptr %load203  %w = load <16 x i8>, ptr @v16i8204  %a = add <16 x i8> %v, %w205  %f = bitcast <16 x i8> %a to i128206  call void @conv_i128_to_v16i8( i128 %f, ptr %store )207  ret void208}209 210define void @conv_i128_to_v8i16( i128 %val,  ptr %store ) {211; CHECK-LABEL: conv_i128_to_v8i16:212; CHECK: vrev32.16213  %v = bitcast i128 %val to <8 x i16>214  %w = load  <8 x i16>,  ptr @v8i16215  %a = add <8 x i16> %v, %w216  store <8 x i16> %a, ptr %store217  ret void218}219 220define void @conv_v8i16_to_i128( ptr %load, ptr %store ) {221; CHECK-LABEL: conv_v8i16_to_i128:222; CHECK: vrev32.16223  %v = load <8 x i16>, ptr %load224  %w = load <8 x i16>, ptr @v8i16225  %a = add <8 x i16> %v, %w226  %f = bitcast <8 x i16> %a to i128227  call void @conv_i128_to_v8i16( i128 %f, ptr %store )228  ret void229}230 231define void @conv_i128_to_v4i32( i128 %val,  ptr %store ) {232; CHECK-LABEL: conv_i128_to_v4i32:233; CHECK: vrev64.32234  %v = bitcast i128 %val to <4 x i32>235  %w = load <4 x i32>, ptr @v4i32236  %a = add <4 x i32> %v, %w237  store <4 x i32> %a, ptr %store238  ret void239}240 241define void @conv_v4i32_to_i128( ptr %load, ptr %store ) {242; CHECK-LABEL: conv_v4i32_to_i128:243; CHECK: vrev64.32244  %v = load <4 x i32>, ptr %load245  %w = load <4 x i32>, ptr @v4i32246  %a = add <4 x i32> %v, %w247  %f = bitcast <4 x i32> %a to i128248  call void @conv_i128_to_v4i32( i128 %f, ptr %store )249  ret void250}251 252define void @conv_i128_to_v4f32( i128 %val,  ptr %store ) {253; CHECK-LABEL: conv_i128_to_v4f32:254; CHECK: vrev64.32255  %v = bitcast i128 %val to <4 x float>256  %w = load <4 x float>, ptr @v4f32257  %a = fadd <4 x float> %v, %w258  store <4 x float> %a, ptr %store259  ret void260}261 262define void @conv_v4f32_to_i128( ptr %load, ptr %store ) {263; CHECK-LABEL: conv_v4f32_to_i128:264; CHECK: vrev64.32265  %v = load <4 x float>, ptr %load266  %w = load <4 x float>, ptr @v4f32267  %a = fadd <4 x float> %v, %w268  %f = bitcast <4 x float> %a to i128269  call void @conv_i128_to_v4f32( i128 %f, ptr %store )270  ret void271}272 273define void @conv_f128_to_v2f64( fp128 %val,  ptr %store ) {274; CHECK-LABEL: conv_f128_to_v2f64:275; CHECK: vrev64.32276  %v = bitcast fp128 %val to <2 x double>277  %w = load <2 x double>, ptr @v2f64278  %a = fadd <2 x double> %v, %w279  store <2 x double> %a, ptr %store280  ret void281}282 283define void @conv_v2f64_to_f128( ptr %load, ptr %store ) {284; CHECK-LABEL: conv_v2f64_to_f128:285; CHECK: vrev64.32286  %v = load <2 x double>, ptr %load287  %w = load <2 x double>, ptr @v2f64288  %a = fadd <2 x double> %v, %w289  %f = bitcast <2 x double> %a to fp128290  call void @conv_f128_to_v2f64( fp128 %f, ptr %store )291  ret void292}293 294define void @conv_f128_to_v16i8( fp128 %val,  ptr %store ) {295; CHECK-LABEL: conv_f128_to_v16i8:296; CHECK: vrev32.8297  %v = bitcast fp128 %val to <16 x i8>298  %w = load  <16 x i8>,  ptr @v16i8299  %a = add <16 x i8> %v, %w300  store <16 x i8> %a, ptr %store301  ret void302}303 304define void @conv_v16i8_to_f128( ptr %load, ptr %store ) {305; CHECK-LABEL: conv_v16i8_to_f128:306; CHECK: vrev32.8307  %v = load <16 x i8>, ptr %load308  %w = load <16 x i8>, ptr @v16i8309  %a = add <16 x i8> %v, %w310  %f = bitcast <16 x i8> %a to fp128311  call void @conv_f128_to_v16i8( fp128 %f, ptr %store )312  ret void313}314 315define void @conv_f128_to_v8i16( fp128 %val,  ptr %store ) {316; CHECK-LABEL: conv_f128_to_v8i16:317; CHECK: vrev32.16318  %v = bitcast fp128 %val to <8 x i16>319  %w = load  <8 x i16>,  ptr @v8i16320  %a = add <8 x i16> %v, %w321  store <8 x i16> %a, ptr %store322  ret void323}324 325define void @conv_v8i16_to_f128( ptr %load, ptr %store ) {326; CHECK-LABEL: conv_v8i16_to_f128:327; CHECK: vrev32.16328  %v = load <8 x i16>, ptr %load329  %w = load <8 x i16>, ptr @v8i16330  %a = add <8 x i16> %v, %w331  %f = bitcast <8 x i16> %a to fp128332  call void @conv_f128_to_v8i16( fp128 %f, ptr %store )333  ret void334}335 336define void @conv_f128_to_v4f32( fp128 %val,  ptr %store ) {337; CHECK-LABEL: conv_f128_to_v4f32:338; CHECK: vrev64.32339  %v = bitcast fp128 %val to <4 x float>340  %w = load <4 x float>, ptr @v4f32341  %a = fadd <4 x float> %v, %w342  store <4 x float> %a, ptr %store343  ret void344}345 346define void @conv_v4f32_to_f128( ptr %load, ptr %store ) {347; CHECK-LABEL: conv_v4f32_to_f128:348; CHECK: vrev64.32349  %v = load <4 x float>, ptr %load350  %w = load <4 x float>, ptr @v4f32351  %a = fadd <4 x float> %v, %w352  %f = bitcast <4 x float> %a to fp128353  call void @conv_f128_to_v4f32( fp128 %f, ptr %store )354  ret void355}356 357define void @arg_v4i32( <4 x i32> %var, ptr %store ) {358; CHECK-LABEL: arg_v4i32:359; CHECK: vmov   [[REG2:d[0-9]+]], r3, r2360; CHECK: vmov   [[REG1:d[0-9]+]], r1, r0361; CHECK: vst1.64 {[[REG1]], [[REG2]]},362; CHECK-HARD-LABEL: arg_v4i32:363; CHECK-HARD-NOT: vmov364; CHECK-HARD: vst1.64 {d0, d1}365  store <4 x i32> %var, ptr %store366  ret void367}368 369define void @arg_v8i16( <8 x i16> %var, ptr %store ) {370; CHECK-LABEL: arg_v8i16:371; CHECK: vmov   [[REG2:d[0-9]+]], r3, r2372; CHECK: vmov   [[REG1:d[0-9]+]], r1, r0373; CHECK: vst1.64 {[[REG1]], [[REG2]]},374; CHECK-HARD-LABEL: arg_v8i16:375; CHECK-HARD-NOT: vmov376; CHECK-HARD: vst1.64 {d0, d1}377  store <8 x i16> %var, ptr %store378  ret void379}380 381define void @arg_v16i8( <16 x i8> %var, ptr %store ) {382; CHECK-LABEL: arg_v16i8:383; CHECK: vmov   [[REG2:d[0-9]+]], r3, r2384; CHECK: vmov   [[REG1:d[0-9]+]], r1, r0385; CHECK: vst1.64 {[[REG1]], [[REG2]]},386; CHECK-HARD-LABEL: arg_v16i8:387; CHECK-HARD-NOT: vmov388; CHECK-HARD: vst1.64 {d0, d1}389  store <16 x i8> %var, ptr %store390  ret void391}392 393