brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · a980c96 Raw
130 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-none-elf -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc -mtriple=aarch64-none-elf -verify-machineinstrs -global-isel %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5define i32 @from_cmpeq(i32 %xx, i32 %y) {6; CHECK-LABEL: from_cmpeq:7; CHECK:       // %bb.0:8; CHECK-NEXT:    and w8, w1, #0x19; CHECK-NEXT:    cmp w0, #910; CHECK-NEXT:    csel w0, w8, wzr, eq11; CHECK-NEXT:    ret12  %x = icmp eq i32 %xx, 913  %masked = and i32 %y, 114 15  %r = select i1 %x, i32 %masked, i32 016  ret i32 %r17}18 19define i32 @from_cmpeq_fail_bad_andmask(i32 %xx, i32 %y) {20; CHECK-LABEL: from_cmpeq_fail_bad_andmask:21; CHECK:       // %bb.0:22; CHECK-NEXT:    and w8, w1, #0x323; CHECK-NEXT:    cmp w0, #924; CHECK-NEXT:    csel w0, w8, wzr, eq25; CHECK-NEXT:    ret26  %x = icmp eq i32 %xx, 927  %masked = and i32 %y, 328  %r = select i1 %x, i32 %masked, i32 029  ret i32 %r30}31 32define i32 @from_i1(i1 %x, i32 %y) {33; CHECK-SD-LABEL: from_i1:34; CHECK-SD:       // %bb.0:35; CHECK-SD-NEXT:    and w8, w0, w136; CHECK-SD-NEXT:    and w0, w8, #0x137; CHECK-SD-NEXT:    ret38;39; CHECK-GI-LABEL: from_i1:40; CHECK-GI:       // %bb.0:41; CHECK-GI-NEXT:    and w8, w0, #0x142; CHECK-GI-NEXT:    and w9, w1, #0x143; CHECK-GI-NEXT:    tst w8, #0x144; CHECK-GI-NEXT:    csel w0, w9, wzr, ne45; CHECK-GI-NEXT:    ret46  %masked = and i32 %y, 147  %r = select i1 %x, i32 %masked, i32 048  ret i32 %r49}50 51define i32 @from_trunc_i8(i8 %xx, i32 %y) {52; CHECK-SD-LABEL: from_trunc_i8:53; CHECK-SD:       // %bb.0:54; CHECK-SD-NEXT:    and w8, w0, w155; CHECK-SD-NEXT:    and w0, w8, #0x156; CHECK-SD-NEXT:    ret57;58; CHECK-GI-LABEL: from_trunc_i8:59; CHECK-GI:       // %bb.0:60; CHECK-GI-NEXT:    and w8, w0, #0x161; CHECK-GI-NEXT:    and w9, w1, #0x162; CHECK-GI-NEXT:    tst w8, #0x163; CHECK-GI-NEXT:    csel w0, w9, wzr, ne64; CHECK-GI-NEXT:    ret65  %masked = and i32 %y, 166  %x = trunc i8 %xx to i167  %r = select i1 %x, i32 %masked, i32 068  ret i32 %r69}70 71define i32 @from_trunc_i64(i64 %xx, i32 %y) {72; CHECK-SD-LABEL: from_trunc_i64:73; CHECK-SD:       // %bb.0:74; CHECK-SD-NEXT:    and w8, w0, w175; CHECK-SD-NEXT:    and w0, w8, #0x176; CHECK-SD-NEXT:    ret77;78; CHECK-GI-LABEL: from_trunc_i64:79; CHECK-GI:       // %bb.0:80; CHECK-GI-NEXT:    and w8, w0, #0x181; CHECK-GI-NEXT:    and w9, w1, #0x182; CHECK-GI-NEXT:    tst w8, #0x183; CHECK-GI-NEXT:    csel w0, w9, wzr, ne84; CHECK-GI-NEXT:    ret85  %masked = and i32 %y, 186  %x = trunc i64 %xx to i187  %r = select i1 %x, i32 %masked, i32 088  ret i32 %r89}90 91define i32 @from_i1_fail_bad_select0(i1 %x, i32 %y) {92; CHECK-SD-LABEL: from_i1_fail_bad_select0:93; CHECK-SD:       // %bb.0:94; CHECK-SD-NEXT:    and w8, w1, #0x195; CHECK-SD-NEXT:    tst w0, #0x196; CHECK-SD-NEXT:    csinc w0, w8, wzr, ne97; CHECK-SD-NEXT:    ret98;99; CHECK-GI-LABEL: from_i1_fail_bad_select0:100; CHECK-GI:       // %bb.0:101; CHECK-GI-NEXT:    and w8, w0, #0x1102; CHECK-GI-NEXT:    and w9, w1, #0x1103; CHECK-GI-NEXT:    tst w8, #0x1104; CHECK-GI-NEXT:    csinc w0, w9, wzr, ne105; CHECK-GI-NEXT:    ret106  %masked = and i32 %y, 1107  %r = select i1 %x, i32 %masked, i32 1108  ret i32 %r109}110 111define i32 @from_i1_fail_bad_select1(i1 %x, i32 %y) {112; CHECK-SD-LABEL: from_i1_fail_bad_select1:113; CHECK-SD:       // %bb.0:114; CHECK-SD-NEXT:    and w8, w1, #0x1115; CHECK-SD-NEXT:    tst w0, #0x1116; CHECK-SD-NEXT:    csel w0, wzr, w8, ne117; CHECK-SD-NEXT:    ret118;119; CHECK-GI-LABEL: from_i1_fail_bad_select1:120; CHECK-GI:       // %bb.0:121; CHECK-GI-NEXT:    and w8, w0, #0x1122; CHECK-GI-NEXT:    and w9, w1, #0x1123; CHECK-GI-NEXT:    tst w8, #0x1124; CHECK-GI-NEXT:    csel w0, wzr, w9, ne125; CHECK-GI-NEXT:    ret126  %masked = and i32 %y, 1127  %r = select i1 %x, i32 0, i32 %masked128  ret i32 %r129}130