brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.3 KiB · 235fee7 Raw
263 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64-unknown-unknown | FileCheck %s3; RUN: llc < %s -mtriple=aarch64-windows         | FileCheck %s -check-prefix=CHECK-WIN4; RUN: llc < %s -mtriple=aarch64-apple-darwin    | FileCheck %s -check-prefix=CHECK-DARWIN5 6; The Windows runtime doesn't have these.7; CHECK-WIN-NOT: __ashlti38; CHECK-WIN-NOT: __ashrti39 10; Darwin compiler-rt excludes these.11; CHECK-DARWIN-NOT: __ashlti312; CHECK-DARWIN-NOT: __ashrti313 14define i64 @f0(i64 %val, i64 %amt) minsize optsize {15; CHECK-LABEL: f0:16; CHECK:       // %bb.0:17; CHECK-NEXT:    lsl x0, x0, x118; CHECK-NEXT:    ret19;20; CHECK-WIN-LABEL: f0:21; CHECK-WIN:       // %bb.0:22; CHECK-WIN-NEXT:    lsl x0, x0, x123; CHECK-WIN-NEXT:    ret24;25; CHECK-DARWIN-LABEL: f0:26; CHECK-DARWIN:       ; %bb.0:27; CHECK-DARWIN-NEXT:    lsl x0, x0, x128; CHECK-DARWIN-NEXT:    ret29  %res = shl i64 %val, %amt30  ret i64 %res31}32 33define i32 @f1(i64 %x, i64 %y) minsize optsize {34; CHECK-LABEL: f1:35; CHECK:       // %bb.0:36; CHECK-NEXT:    lsl x0, x0, x137; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x038; CHECK-NEXT:    ret39;40; CHECK-WIN-LABEL: f1:41; CHECK-WIN:       // %bb.0:42; CHECK-WIN-NEXT:    lsl x0, x0, x143; CHECK-WIN-NEXT:    // kill: def $w0 killed $w0 killed $x044; CHECK-WIN-NEXT:    ret45;46; CHECK-DARWIN-LABEL: f1:47; CHECK-DARWIN:       ; %bb.0:48; CHECK-DARWIN-NEXT:    lsl x0, x0, x149; CHECK-DARWIN-NEXT:    ; kill: def $w0 killed $w0 killed $x050; CHECK-DARWIN-NEXT:    ret51	%a = shl i64 %x, %y52	%b = trunc i64 %a to i3253	ret i32 %b54}55 56define i32 @f2(i64 %x, i64 %y) minsize optsize {57; CHECK-LABEL: f2:58; CHECK:       // %bb.0:59; CHECK-NEXT:    asr x0, x0, x160; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x061; CHECK-NEXT:    ret62;63; CHECK-WIN-LABEL: f2:64; CHECK-WIN:       // %bb.0:65; CHECK-WIN-NEXT:    asr x0, x0, x166; CHECK-WIN-NEXT:    // kill: def $w0 killed $w0 killed $x067; CHECK-WIN-NEXT:    ret68;69; CHECK-DARWIN-LABEL: f2:70; CHECK-DARWIN:       ; %bb.0:71; CHECK-DARWIN-NEXT:    asr x0, x0, x172; CHECK-DARWIN-NEXT:    ; kill: def $w0 killed $w0 killed $x073; CHECK-DARWIN-NEXT:    ret74	%a = ashr i64 %x, %y75	%b = trunc i64 %a to i3276	ret i32 %b77}78 79define i32 @f3(i64 %x, i64 %y) minsize optsize {80; CHECK-LABEL: f3:81; CHECK:       // %bb.0:82; CHECK-NEXT:    lsr x0, x0, x183; CHECK-NEXT:    // kill: def $w0 killed $w0 killed $x084; CHECK-NEXT:    ret85;86; CHECK-WIN-LABEL: f3:87; CHECK-WIN:       // %bb.0:88; CHECK-WIN-NEXT:    lsr x0, x0, x189; CHECK-WIN-NEXT:    // kill: def $w0 killed $w0 killed $x090; CHECK-WIN-NEXT:    ret91;92; CHECK-DARWIN-LABEL: f3:93; CHECK-DARWIN:       ; %bb.0:94; CHECK-DARWIN-NEXT:    lsr x0, x0, x195; CHECK-DARWIN-NEXT:    ; kill: def $w0 killed $w0 killed $x096; CHECK-DARWIN-NEXT:    ret97	%a = lshr i64 %x, %y98	%b = trunc i64 %a to i3299	ret i32 %b100}101 102define dso_local { i64, i64 } @shl128(i64 %x.coerce0, i64 %x.coerce1, i8 signext %y) minsize optsize {103; CHECK-LABEL: shl128:104; CHECK:       // %bb.0: // %entry105; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill106; CHECK-NEXT:    .cfi_def_cfa_offset 16107; CHECK-NEXT:    .cfi_offset w30, -16108; CHECK-NEXT:    bl __ashlti3109; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload110; CHECK-NEXT:    ret111;112; CHECK-WIN-LABEL: shl128:113; CHECK-WIN:       // %bb.0: // %entry114; CHECK-WIN-NEXT:    lsr x8, x0, #1115; CHECK-WIN-NEXT:    mvn w9, w2116; CHECK-WIN-NEXT:    mov w10, w2117; CHECK-WIN-NEXT:    lsl x11, x0, x10118; CHECK-WIN-NEXT:    tst x10, #0x40119; CHECK-WIN-NEXT:    lsr x8, x8, x9120; CHECK-WIN-NEXT:    lsl x9, x1, x10121; CHECK-WIN-NEXT:    csel x0, xzr, x11, ne122; CHECK-WIN-NEXT:    orr x8, x9, x8123; CHECK-WIN-NEXT:    csel x1, x11, x8, ne124; CHECK-WIN-NEXT:    ret125;126; CHECK-DARWIN-LABEL: shl128:127; CHECK-DARWIN:       ; %bb.0: ; %entry128; CHECK-DARWIN-NEXT:    lsr x8, x0, #1129; CHECK-DARWIN-NEXT:    mvn w9, w2130; CHECK-DARWIN-NEXT:    mov w10, w2131; CHECK-DARWIN-NEXT:    lsl x11, x0, x10132; CHECK-DARWIN-NEXT:    tst x10, #0x40133; CHECK-DARWIN-NEXT:    lsr x8, x8, x9134; CHECK-DARWIN-NEXT:    lsl x9, x1, x10135; CHECK-DARWIN-NEXT:    csel x0, xzr, x11, ne136; CHECK-DARWIN-NEXT:    orr x8, x9, x8137; CHECK-DARWIN-NEXT:    csel x1, x11, x8, ne138; CHECK-DARWIN-NEXT:    ret139 140entry:141  %x.sroa.2.0.insert.ext = zext i64 %x.coerce1 to i128142  %x.sroa.2.0.insert.shift = shl nuw i128 %x.sroa.2.0.insert.ext, 64143  %x.sroa.0.0.insert.ext = zext i64 %x.coerce0 to i128144  %x.sroa.0.0.insert.insert = or i128 %x.sroa.2.0.insert.shift, %x.sroa.0.0.insert.ext145  %conv = sext i8 %y to i32146  %sh_prom = zext i32 %conv to i128147  %shl = shl i128 %x.sroa.0.0.insert.insert, %sh_prom148  %retval.sroa.0.0.extract.trunc = trunc i128 %shl to i64149  %retval.sroa.2.0.extract.shift = lshr i128 %shl, 64150  %retval.sroa.2.0.extract.trunc = trunc i128 %retval.sroa.2.0.extract.shift to i64151  %.fca.0.insert = insertvalue { i64, i64 } undef, i64 %retval.sroa.0.0.extract.trunc, 0152  %.fca.1.insert = insertvalue { i64, i64 } %.fca.0.insert, i64 %retval.sroa.2.0.extract.trunc, 1153  ret { i64, i64 } %.fca.1.insert154}155 156define dso_local { i64, i64 } @ashr128(i64 %x.coerce0, i64 %x.coerce1, i8 signext %y) minsize optsize {157; CHECK-LABEL: ashr128:158; CHECK:       // %bb.0: // %entry159; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill160; CHECK-NEXT:    .cfi_def_cfa_offset 16161; CHECK-NEXT:    .cfi_offset w30, -16162; CHECK-NEXT:    bl __ashrti3163; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload164; CHECK-NEXT:    ret165;166; CHECK-WIN-LABEL: ashr128:167; CHECK-WIN:       // %bb.0: // %entry168; CHECK-WIN-NEXT:    lsl x8, x1, #1169; CHECK-WIN-NEXT:    mov w9, w2170; CHECK-WIN-NEXT:    mvn w10, w2171; CHECK-WIN-NEXT:    lsr x11, x0, x9172; CHECK-WIN-NEXT:    asr x12, x1, #63173; CHECK-WIN-NEXT:    tst x9, #0x40174; CHECK-WIN-NEXT:    lsl x8, x8, x10175; CHECK-WIN-NEXT:    asr x10, x1, x9176; CHECK-WIN-NEXT:    orr x8, x8, x11177; CHECK-WIN-NEXT:    csel x1, x12, x10, ne178; CHECK-WIN-NEXT:    csel x0, x10, x8, ne179; CHECK-WIN-NEXT:    ret180;181; CHECK-DARWIN-LABEL: ashr128:182; CHECK-DARWIN:       ; %bb.0: ; %entry183; CHECK-DARWIN-NEXT:    lsl x8, x1, #1184; CHECK-DARWIN-NEXT:    mov w9, w2185; CHECK-DARWIN-NEXT:    mvn w10, w2186; CHECK-DARWIN-NEXT:    lsr x11, x0, x9187; CHECK-DARWIN-NEXT:    asr x12, x1, #63188; CHECK-DARWIN-NEXT:    tst x9, #0x40189; CHECK-DARWIN-NEXT:    lsl x8, x8, x10190; CHECK-DARWIN-NEXT:    asr x10, x1, x9191; CHECK-DARWIN-NEXT:    orr x8, x8, x11192; CHECK-DARWIN-NEXT:    csel x1, x12, x10, ne193; CHECK-DARWIN-NEXT:    csel x0, x10, x8, ne194; CHECK-DARWIN-NEXT:    ret195entry:196  %x.sroa.2.0.insert.ext = zext i64 %x.coerce1 to i128197  %x.sroa.2.0.insert.shift = shl nuw i128 %x.sroa.2.0.insert.ext, 64198  %x.sroa.0.0.insert.ext = zext i64 %x.coerce0 to i128199  %x.sroa.0.0.insert.insert = or i128 %x.sroa.2.0.insert.shift, %x.sroa.0.0.insert.ext200  %conv = sext i8 %y to i32201  %sh_prom = zext i32 %conv to i128202  %shr = ashr i128 %x.sroa.0.0.insert.insert, %sh_prom203  %retval.sroa.0.0.extract.trunc = trunc i128 %shr to i64204  %retval.sroa.2.0.extract.shift = lshr i128 %shr, 64205  %retval.sroa.2.0.extract.trunc = trunc i128 %retval.sroa.2.0.extract.shift to i64206  %.fca.0.insert = insertvalue { i64, i64 } undef, i64 %retval.sroa.0.0.extract.trunc, 0207  %.fca.1.insert = insertvalue { i64, i64 } %.fca.0.insert, i64 %retval.sroa.2.0.extract.trunc, 1208  ret { i64, i64 } %.fca.1.insert209}210 211define dso_local { i64, i64 } @lshr128(i64 %x.coerce0, i64 %x.coerce1, i8 signext %y) minsize optsize {212; CHECK-LABEL: lshr128:213; CHECK:       // %bb.0: // %entry214; CHECK-NEXT:    str x30, [sp, #-16]! // 8-byte Folded Spill215; CHECK-NEXT:    .cfi_def_cfa_offset 16216; CHECK-NEXT:    .cfi_offset w30, -16217; CHECK-NEXT:    bl __lshrti3218; CHECK-NEXT:    ldr x30, [sp], #16 // 8-byte Folded Reload219; CHECK-NEXT:    ret220;221; CHECK-WIN-LABEL: lshr128:222; CHECK-WIN:       // %bb.0: // %entry223; CHECK-WIN-NEXT:    lsl x8, x1, #1224; CHECK-WIN-NEXT:    mov w9, w2225; CHECK-WIN-NEXT:    mvn w10, w2226; CHECK-WIN-NEXT:    lsr x11, x0, x9227; CHECK-WIN-NEXT:    tst x9, #0x40228; CHECK-WIN-NEXT:    lsl x8, x8, x10229; CHECK-WIN-NEXT:    lsr x10, x1, x9230; CHECK-WIN-NEXT:    orr x8, x8, x11231; CHECK-WIN-NEXT:    csel x1, xzr, x10, ne232; CHECK-WIN-NEXT:    csel x0, x10, x8, ne233; CHECK-WIN-NEXT:    ret234;235; CHECK-DARWIN-LABEL: lshr128:236; CHECK-DARWIN:       ; %bb.0: ; %entry237; CHECK-DARWIN-NEXT:    lsl x8, x1, #1238; CHECK-DARWIN-NEXT:    mov w9, w2239; CHECK-DARWIN-NEXT:    mvn w10, w2240; CHECK-DARWIN-NEXT:    lsr x11, x0, x9241; CHECK-DARWIN-NEXT:    tst x9, #0x40242; CHECK-DARWIN-NEXT:    lsl x8, x8, x10243; CHECK-DARWIN-NEXT:    lsr x10, x1, x9244; CHECK-DARWIN-NEXT:    orr x8, x8, x11245; CHECK-DARWIN-NEXT:    csel x1, xzr, x10, ne246; CHECK-DARWIN-NEXT:    csel x0, x10, x8, ne247; CHECK-DARWIN-NEXT:    ret248entry:249  %x.sroa.2.0.insert.ext = zext i64 %x.coerce1 to i128250  %x.sroa.2.0.insert.shift = shl nuw i128 %x.sroa.2.0.insert.ext, 64251  %x.sroa.0.0.insert.ext = zext i64 %x.coerce0 to i128252  %x.sroa.0.0.insert.insert = or i128 %x.sroa.2.0.insert.shift, %x.sroa.0.0.insert.ext253  %conv = sext i8 %y to i32254  %sh_prom = zext i32 %conv to i128255  %shr = lshr i128 %x.sroa.0.0.insert.insert, %sh_prom256  %retval.sroa.0.0.extract.trunc = trunc i128 %shr to i64257  %retval.sroa.2.0.extract.shift = lshr i128 %shr, 64258  %retval.sroa.2.0.extract.trunc = trunc i128 %retval.sroa.2.0.extract.shift to i64259  %.fca.0.insert = insertvalue { i64, i64 } undef, i64 %retval.sroa.0.0.extract.trunc, 0260  %.fca.1.insert = insertvalue { i64, i64 } %.fca.0.insert, i64 %retval.sroa.2.0.extract.trunc, 1261  ret { i64, i64 } %.fca.1.insert262}263