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