brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.6 KiB · 628506b Raw
572 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64-linux-gnu -o - %s | FileCheck %s3 4; load zero-extended i32, bitcast to f645define double @load_u64_from_u32(ptr %n){6; CHECK-LABEL: load_u64_from_u32:7; CHECK:       // %bb.0: // %entry8; CHECK-NEXT:    ldr s0, [x0]9; CHECK-NEXT:    ret10entry:11  %0 = load i32, ptr %n, align 412  %conv = zext i32 %0 to i6413  %1 = bitcast i64 %conv to double14  ret double %115}16 17; load zero-extended i16, bitcast to f6418define double @load_u64_from_u16(ptr %n){19; CHECK-LABEL: load_u64_from_u16:20; CHECK:       // %bb.0: // %entry21; CHECK-NEXT:    ldr h0, [x0]22; CHECK-NEXT:    ret23entry:24  %0 = load i16, ptr %n, align 225  %conv = zext i16 %0 to i6426  %1 = bitcast i64 %conv to double27  ret double %128}29 30; load zero-extended i8, bitcast to f6431define double @load_u64_from_u8(ptr %n){32; CHECK-LABEL: load_u64_from_u8:33; CHECK:       // %bb.0: // %entry34; CHECK-NEXT:    ldr b0, [x0]35; CHECK-NEXT:    ret36entry:37  %0 = load i8, ptr %n, align 138  %conv = zext i8 %0 to i6439  %1 = bitcast i64 %conv to double40  ret double %141}42 43; load zero-extended i16, bitcast to f3244define float @load_u32_from_u16(ptr %n){45; CHECK-LABEL: load_u32_from_u16:46; CHECK:       // %bb.0: // %entry47; CHECK-NEXT:    ldr h0, [x0]48; CHECK-NEXT:    ret49entry:50  %0 = load i16, ptr %n, align 251  %conv = zext i16 %0 to i3252  %1 = bitcast i32 %conv to float53  ret float %154}55 56; load zero-extended i8, bitcast to f3257define float @load_u32_from_u8(ptr %n){58; CHECK-LABEL: load_u32_from_u8:59; CHECK:       // %bb.0: // %entry60; CHECK-NEXT:    ldr b0, [x0]61; CHECK-NEXT:    ret62entry:63  %0 = load i8, ptr %n, align 164  %conv = zext i8 %0 to i3265  %1 = bitcast i32 %conv to float66  ret float %167}68 69; load zero-extended i8, bitcast to f1670define half @load_u16_from_u8(ptr %n){71; CHECK-LABEL: load_u16_from_u8:72; CHECK:       // %bb.0: // %entry73; CHECK-NEXT:    ldr b0, [x0]74; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s075; CHECK-NEXT:    ret76entry:77  %0 = load i8, ptr %n, align 178  %conv = zext i8 %0 to i1679  %1 = bitcast i16 %conv to half80  ret half %181}82 83 84define double @load_u64_from_u32_off1(ptr %n){85; CHECK-LABEL: load_u64_from_u32_off1:86; CHECK:       // %bb.0: // %entry87; CHECK-NEXT:    ldur s0, [x0, #1]88; CHECK-NEXT:    ret89entry:90  %p = getelementptr i8, ptr %n, i64 191  %0 = load i32, ptr %p, align 492  %conv = zext i32 %0 to i6493  %1 = bitcast i64 %conv to double94  ret double %195}96 97define double @load_u64_from_u16_off1(ptr %n){98; CHECK-LABEL: load_u64_from_u16_off1:99; CHECK:       // %bb.0: // %entry100; CHECK-NEXT:    ldur h0, [x0, #1]101; CHECK-NEXT:    ret102entry:103  %p = getelementptr i8, ptr %n, i64 1104  %0 = load i16, ptr %p, align 2105  %conv = zext i16 %0 to i64106  %1 = bitcast i64 %conv to double107  ret double %1108}109 110define double @load_u64_from_u8_off1(ptr %n){111; CHECK-LABEL: load_u64_from_u8_off1:112; CHECK:       // %bb.0: // %entry113; CHECK-NEXT:    ldr b0, [x0, #1]114; CHECK-NEXT:    ret115entry:116  %p = getelementptr i8, ptr %n, i64 1117  %0 = load i8, ptr %p, align 1118  %conv = zext i8 %0 to i64119  %1 = bitcast i64 %conv to double120  ret double %1121}122 123define float @load_u32_from_u16_off1(ptr %n){124; CHECK-LABEL: load_u32_from_u16_off1:125; CHECK:       // %bb.0: // %entry126; CHECK-NEXT:    ldur h0, [x0, #1]127; CHECK-NEXT:    ret128entry:129  %p = getelementptr i8, ptr %n, i64 1130  %0 = load i16, ptr %p, align 2131  %conv = zext i16 %0 to i32132  %1 = bitcast i32 %conv to float133  ret float %1134}135 136define float @load_u32_from_u8_off1(ptr %n){137; CHECK-LABEL: load_u32_from_u8_off1:138; CHECK:       // %bb.0: // %entry139; CHECK-NEXT:    ldr b0, [x0, #1]140; CHECK-NEXT:    ret141entry:142  %p = getelementptr i8, ptr %n, i64 1143  %0 = load i8, ptr %p, align 1144  %conv = zext i8 %0 to i32145  %1 = bitcast i32 %conv to float146  ret float %1147}148 149define half @load_u16_from_u8_off1(ptr %n){150; CHECK-LABEL: load_u16_from_u8_off1:151; CHECK:       // %bb.0: // %entry152; CHECK-NEXT:    ldr b0, [x0, #1]153; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0154; CHECK-NEXT:    ret155entry:156  %p = getelementptr i8, ptr %n, i64 1157  %0 = load i8, ptr %p, align 1158  %conv = zext i8 %0 to i16159  %1 = bitcast i16 %conv to half160  ret half %1161}162 163 164 165define double @load_u64_from_u32_off2(ptr %n){166; CHECK-LABEL: load_u64_from_u32_off2:167; CHECK:       // %bb.0: // %entry168; CHECK-NEXT:    ldur s0, [x0, #2]169; CHECK-NEXT:    ret170entry:171  %p = getelementptr i8, ptr %n, i64 2172  %0 = load i32, ptr %p, align 4173  %conv = zext i32 %0 to i64174  %1 = bitcast i64 %conv to double175  ret double %1176}177 178define double @load_u64_from_u16_off2(ptr %n){179; CHECK-LABEL: load_u64_from_u16_off2:180; CHECK:       // %bb.0: // %entry181; CHECK-NEXT:    ldr h0, [x0, #2]182; CHECK-NEXT:    ret183entry:184  %p = getelementptr i8, ptr %n, i64 2185  %0 = load i16, ptr %p, align 2186  %conv = zext i16 %0 to i64187  %1 = bitcast i64 %conv to double188  ret double %1189}190 191define double @load_u64_from_u8_off2(ptr %n){192; CHECK-LABEL: load_u64_from_u8_off2:193; CHECK:       // %bb.0: // %entry194; CHECK-NEXT:    ldr b0, [x0, #2]195; CHECK-NEXT:    ret196entry:197  %p = getelementptr i8, ptr %n, i64 2198  %0 = load i8, ptr %p, align 1199  %conv = zext i8 %0 to i64200  %1 = bitcast i64 %conv to double201  ret double %1202}203 204define float @load_u32_from_u16_off2(ptr %n){205; CHECK-LABEL: load_u32_from_u16_off2:206; CHECK:       // %bb.0: // %entry207; CHECK-NEXT:    ldr h0, [x0, #2]208; CHECK-NEXT:    ret209entry:210  %p = getelementptr i8, ptr %n, i64 2211  %0 = load i16, ptr %p, align 2212  %conv = zext i16 %0 to i32213  %1 = bitcast i32 %conv to float214  ret float %1215}216 217define float @load_u32_from_u8_off2(ptr %n){218; CHECK-LABEL: load_u32_from_u8_off2:219; CHECK:       // %bb.0: // %entry220; CHECK-NEXT:    ldr b0, [x0, #2]221; CHECK-NEXT:    ret222entry:223  %p = getelementptr i8, ptr %n, i64 2224  %0 = load i8, ptr %p, align 1225  %conv = zext i8 %0 to i32226  %1 = bitcast i32 %conv to float227  ret float %1228}229 230define half @load_u16_from_u8_off2(ptr %n){231; CHECK-LABEL: load_u16_from_u8_off2:232; CHECK:       // %bb.0: // %entry233; CHECK-NEXT:    ldr b0, [x0, #2]234; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0235; CHECK-NEXT:    ret236entry:237  %p = getelementptr i8, ptr %n, i64 2238  %0 = load i8, ptr %p, align 1239  %conv = zext i8 %0 to i16240  %1 = bitcast i16 %conv to half241  ret half %1242}243 244 245 246define double @load_u64_from_u32_off255(ptr %n){247; CHECK-LABEL: load_u64_from_u32_off255:248; CHECK:       // %bb.0: // %entry249; CHECK-NEXT:    ldur s0, [x0, #255]250; CHECK-NEXT:    ret251entry:252  %p = getelementptr i8, ptr %n, i64 255253  %0 = load i32, ptr %p, align 4254  %conv = zext i32 %0 to i64255  %1 = bitcast i64 %conv to double256  ret double %1257}258 259define double @load_u64_from_u16_off255(ptr %n){260; CHECK-LABEL: load_u64_from_u16_off255:261; CHECK:       // %bb.0: // %entry262; CHECK-NEXT:    ldur h0, [x0, #255]263; CHECK-NEXT:    ret264entry:265  %p = getelementptr i8, ptr %n, i64 255266  %0 = load i16, ptr %p, align 2267  %conv = zext i16 %0 to i64268  %1 = bitcast i64 %conv to double269  ret double %1270}271 272define double @load_u64_from_u8_off255(ptr %n){273; CHECK-LABEL: load_u64_from_u8_off255:274; CHECK:       // %bb.0: // %entry275; CHECK-NEXT:    ldr b0, [x0, #255]276; CHECK-NEXT:    ret277entry:278  %p = getelementptr i8, ptr %n, i64 255279  %0 = load i8, ptr %p, align 1280  %conv = zext i8 %0 to i64281  %1 = bitcast i64 %conv to double282  ret double %1283}284 285define float @load_u32_from_u16_off255(ptr %n){286; CHECK-LABEL: load_u32_from_u16_off255:287; CHECK:       // %bb.0: // %entry288; CHECK-NEXT:    ldur h0, [x0, #255]289; CHECK-NEXT:    ret290entry:291  %p = getelementptr i8, ptr %n, i64 255292  %0 = load i16, ptr %p, align 2293  %conv = zext i16 %0 to i32294  %1 = bitcast i32 %conv to float295  ret float %1296}297 298define float @load_u32_from_u8_off255(ptr %n){299; CHECK-LABEL: load_u32_from_u8_off255:300; CHECK:       // %bb.0: // %entry301; CHECK-NEXT:    ldr b0, [x0, #255]302; CHECK-NEXT:    ret303entry:304  %p = getelementptr i8, ptr %n, i64 255305  %0 = load i8, ptr %p, align 1306  %conv = zext i8 %0 to i32307  %1 = bitcast i32 %conv to float308  ret float %1309}310 311define half @load_u16_from_u8_off255(ptr %n){312; CHECK-LABEL: load_u16_from_u8_off255:313; CHECK:       // %bb.0: // %entry314; CHECK-NEXT:    ldr b0, [x0, #255]315; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0316; CHECK-NEXT:    ret317entry:318  %p = getelementptr i8, ptr %n, i64 255319  %0 = load i8, ptr %p, align 1320  %conv = zext i8 %0 to i16321  %1 = bitcast i16 %conv to half322  ret half %1323}324 325 326define double @load_u64_from_u32_off256(ptr %n){327; CHECK-LABEL: load_u64_from_u32_off256:328; CHECK:       // %bb.0: // %entry329; CHECK-NEXT:    ldr s0, [x0, #256]330; CHECK-NEXT:    ret331entry:332  %p = getelementptr i8, ptr %n, i64 256333  %0 = load i32, ptr %p, align 4334  %conv = zext i32 %0 to i64335  %1 = bitcast i64 %conv to double336  ret double %1337}338 339define double @load_u64_from_u16_off256(ptr %n){340; CHECK-LABEL: load_u64_from_u16_off256:341; CHECK:       // %bb.0: // %entry342; CHECK-NEXT:    ldr h0, [x0, #256]343; CHECK-NEXT:    ret344entry:345  %p = getelementptr i8, ptr %n, i64 256346  %0 = load i16, ptr %p, align 2347  %conv = zext i16 %0 to i64348  %1 = bitcast i64 %conv to double349  ret double %1350}351 352define double @load_u64_from_u8_off256(ptr %n){353; CHECK-LABEL: load_u64_from_u8_off256:354; CHECK:       // %bb.0: // %entry355; CHECK-NEXT:    ldr b0, [x0, #256]356; CHECK-NEXT:    ret357entry:358  %p = getelementptr i8, ptr %n, i64 256359  %0 = load i8, ptr %p, align 1360  %conv = zext i8 %0 to i64361  %1 = bitcast i64 %conv to double362  ret double %1363}364 365define float @load_u32_from_u16_off256(ptr %n){366; CHECK-LABEL: load_u32_from_u16_off256:367; CHECK:       // %bb.0: // %entry368; CHECK-NEXT:    ldr h0, [x0, #256]369; CHECK-NEXT:    ret370entry:371  %p = getelementptr i8, ptr %n, i64 256372  %0 = load i16, ptr %p, align 2373  %conv = zext i16 %0 to i32374  %1 = bitcast i32 %conv to float375  ret float %1376}377 378define float @load_u32_from_u8_off256(ptr %n){379; CHECK-LABEL: load_u32_from_u8_off256:380; CHECK:       // %bb.0: // %entry381; CHECK-NEXT:    ldr b0, [x0, #256]382; CHECK-NEXT:    ret383entry:384  %p = getelementptr i8, ptr %n, i64 256385  %0 = load i8, ptr %p, align 1386  %conv = zext i8 %0 to i32387  %1 = bitcast i32 %conv to float388  ret float %1389}390 391define half @load_u16_from_u8_off256(ptr %n){392; CHECK-LABEL: load_u16_from_u8_off256:393; CHECK:       // %bb.0: // %entry394; CHECK-NEXT:    ldr b0, [x0, #256]395; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0396; CHECK-NEXT:    ret397entry:398  %p = getelementptr i8, ptr %n, i64 256399  %0 = load i8, ptr %p, align 1400  %conv = zext i8 %0 to i16401  %1 = bitcast i16 %conv to half402  ret half %1403}404 405 406 407define double @load_u64_from_u32_offn(ptr %n){408; CHECK-LABEL: load_u64_from_u32_offn:409; CHECK:       // %bb.0: // %entry410; CHECK-NEXT:    ldr s0, [x0, #16380]411; CHECK-NEXT:    ret412entry:413  %p = getelementptr i8, ptr %n, i64 16380414  %0 = load i32, ptr %p, align 4415  %conv = zext i32 %0 to i64416  %1 = bitcast i64 %conv to double417  ret double %1418}419 420define double @load_u64_from_u16_offn(ptr %n){421; CHECK-LABEL: load_u64_from_u16_offn:422; CHECK:       // %bb.0: // %entry423; CHECK-NEXT:    ldr h0, [x0, #8190]424; CHECK-NEXT:    ret425entry:426  %p = getelementptr i8, ptr %n, i64 8190427  %0 = load i16, ptr %p, align 2428  %conv = zext i16 %0 to i64429  %1 = bitcast i64 %conv to double430  ret double %1431}432 433define double @load_u64_from_u8_offn(ptr %n){434; CHECK-LABEL: load_u64_from_u8_offn:435; CHECK:       // %bb.0: // %entry436; CHECK-NEXT:    ldr b0, [x0, #4095]437; CHECK-NEXT:    ret438entry:439  %p = getelementptr i8, ptr %n, i64 4095440  %0 = load i8, ptr %p, align 1441  %conv = zext i8 %0 to i64442  %1 = bitcast i64 %conv to double443  ret double %1444}445 446define float @load_u32_from_u16_offn(ptr %n){447; CHECK-LABEL: load_u32_from_u16_offn:448; CHECK:       // %bb.0: // %entry449; CHECK-NEXT:    ldr h0, [x0, #8190]450; CHECK-NEXT:    ret451entry:452  %p = getelementptr i8, ptr %n, i64 8190453  %0 = load i16, ptr %p, align 2454  %conv = zext i16 %0 to i32455  %1 = bitcast i32 %conv to float456  ret float %1457}458 459define float @load_u32_from_u8_offn(ptr %n){460; CHECK-LABEL: load_u32_from_u8_offn:461; CHECK:       // %bb.0: // %entry462; CHECK-NEXT:    ldr b0, [x0, #4095]463; CHECK-NEXT:    ret464entry:465  %p = getelementptr i8, ptr %n, i64 4095466  %0 = load i8, ptr %p, align 1467  %conv = zext i8 %0 to i32468  %1 = bitcast i32 %conv to float469  ret float %1470}471 472define half @load_u16_from_u8_offn(ptr %n){473; CHECK-LABEL: load_u16_from_u8_offn:474; CHECK:       // %bb.0: // %entry475; CHECK-NEXT:    ldr b0, [x0, #4095]476; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0477; CHECK-NEXT:    ret478entry:479  %p = getelementptr i8, ptr %n, i64 4095480  %0 = load i8, ptr %p, align 1481  %conv = zext i8 %0 to i16482  %1 = bitcast i16 %conv to half483  ret half %1484}485 486 487define double @load_u64_from_u32_offnp1(ptr %n){488; CHECK-LABEL: load_u64_from_u32_offnp1:489; CHECK:       // %bb.0: // %entry490; CHECK-NEXT:    mov w8, #16384 // =0x4000491; CHECK-NEXT:    ldr s0, [x0, x8]492; CHECK-NEXT:    ret493entry:494  %p = getelementptr i8, ptr %n, i64 16384495  %0 = load i32, ptr %p, align 4496  %conv = zext i32 %0 to i64497  %1 = bitcast i64 %conv to double498  ret double %1499}500 501define double @load_u64_from_u16_offnp1(ptr %n){502; CHECK-LABEL: load_u64_from_u16_offnp1:503; CHECK:       // %bb.0: // %entry504; CHECK-NEXT:    mov w8, #8192 // =0x2000505; CHECK-NEXT:    ldr h0, [x0, x8]506; CHECK-NEXT:    ret507entry:508  %p = getelementptr i8, ptr %n, i64 8192509  %0 = load i16, ptr %p, align 2510  %conv = zext i16 %0 to i64511  %1 = bitcast i64 %conv to double512  ret double %1513}514 515define double @load_u64_from_u8_offnp1(ptr %n){516; CHECK-LABEL: load_u64_from_u8_offnp1:517; CHECK:       // %bb.0: // %entry518; CHECK-NEXT:    mov w8, #4096 // =0x1000519; CHECK-NEXT:    ldr b0, [x0, x8]520; CHECK-NEXT:    ret521entry:522  %p = getelementptr i8, ptr %n, i64 4096523  %0 = load i8, ptr %p, align 1524  %conv = zext i8 %0 to i64525  %1 = bitcast i64 %conv to double526  ret double %1527}528 529define float @load_u32_from_u16_offnp1(ptr %n){530; CHECK-LABEL: load_u32_from_u16_offnp1:531; CHECK:       // %bb.0: // %entry532; CHECK-NEXT:    mov w8, #8192 // =0x2000533; CHECK-NEXT:    ldr h0, [x0, x8]534; CHECK-NEXT:    ret535entry:536  %p = getelementptr i8, ptr %n, i64 8192537  %0 = load i16, ptr %p, align 2538  %conv = zext i16 %0 to i32539  %1 = bitcast i32 %conv to float540  ret float %1541}542 543define float @load_u32_from_u8_offnp1(ptr %n){544; CHECK-LABEL: load_u32_from_u8_offnp1:545; CHECK:       // %bb.0: // %entry546; CHECK-NEXT:    mov w8, #4096 // =0x1000547; CHECK-NEXT:    ldr b0, [x0, x8]548; CHECK-NEXT:    ret549entry:550  %p = getelementptr i8, ptr %n, i64 4096551  %0 = load i8, ptr %p, align 1552  %conv = zext i8 %0 to i32553  %1 = bitcast i32 %conv to float554  ret float %1555}556 557define half @load_u16_from_u8_offnp1(ptr %n){558; CHECK-LABEL: load_u16_from_u8_offnp1:559; CHECK:       // %bb.0: // %entry560; CHECK-NEXT:    mov w8, #4096 // =0x1000561; CHECK-NEXT:    ldr b0, [x0, x8]562; CHECK-NEXT:    // kill: def $h0 killed $h0 killed $s0563; CHECK-NEXT:    ret564entry:565  %p = getelementptr i8, ptr %n, i64 4096566  %0 = load i8, ptr %p, align 1567  %conv = zext i8 %0 to i16568  %1 = bitcast i16 %conv to half569  ret half %1570}571 572