134 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=aarch64-none-elf < %s | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc -mtriple=aarch64-none-elf -global-isel < %s | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5define i32 @neg_select_neg(i32 %a, i32 %b, i1 %bb) {6; CHECK-SD-LABEL: neg_select_neg:7; CHECK-SD: // %bb.0:8; CHECK-SD-NEXT: tst w2, #0x19; CHECK-SD-NEXT: csel w0, w0, w1, ne10; CHECK-SD-NEXT: ret11;12; CHECK-GI-LABEL: neg_select_neg:13; CHECK-GI: // %bb.0:14; CHECK-GI-NEXT: and w8, w2, #0x115; CHECK-GI-NEXT: neg w9, w016; CHECK-GI-NEXT: tst w8, #0x117; CHECK-GI-NEXT: csneg w8, w9, w1, ne18; CHECK-GI-NEXT: neg w0, w819; CHECK-GI-NEXT: ret20 %nega = sub i32 0, %a21 %negb = sub i32 0, %b22 %sel = select i1 %bb, i32 %nega, i32 %negb23 %res = sub i32 0, %sel24 ret i32 %res25}26 27define i32 @negneg_select_nega(i32 %a, i32 %b, i1 %bb) {28; CHECK-SD-LABEL: negneg_select_nega:29; CHECK-SD: // %bb.0:30; CHECK-SD-NEXT: tst w2, #0x131; CHECK-SD-NEXT: csneg w0, w1, w0, eq32; CHECK-SD-NEXT: ret33;34; CHECK-GI-LABEL: negneg_select_nega:35; CHECK-GI: // %bb.0:36; CHECK-GI-NEXT: and w8, w2, #0x137; CHECK-GI-NEXT: tst w8, #0x138; CHECK-GI-NEXT: csneg w8, w1, w0, eq39; CHECK-GI-NEXT: neg w8, w840; CHECK-GI-NEXT: neg w0, w841; CHECK-GI-NEXT: ret42 %nega = sub i32 0, %a43 %sel = select i1 %bb, i32 %nega, i32 %b44 %nsel = sub i32 0, %sel45 %res = sub i32 0, %nsel46 ret i32 %res47}48 49define i32 @neg_select_nega(i32 %a, i32 %b, i1 %bb) {50; CHECK-SD-LABEL: neg_select_nega:51; CHECK-SD: // %bb.0:52; CHECK-SD-NEXT: tst w2, #0x153; CHECK-SD-NEXT: csneg w0, w0, w1, ne54; CHECK-SD-NEXT: ret55;56; CHECK-GI-LABEL: neg_select_nega:57; CHECK-GI: // %bb.0:58; CHECK-GI-NEXT: and w8, w2, #0x159; CHECK-GI-NEXT: tst w8, #0x160; CHECK-GI-NEXT: csneg w8, w1, w0, eq61; CHECK-GI-NEXT: neg w0, w862; CHECK-GI-NEXT: ret63 %nega = sub i32 0, %a64 %sel = select i1 %bb, i32 %nega, i32 %b65 %res = sub i32 0, %sel66 ret i32 %res67}68 69define i32 @neg_select_negb(i32 %a, i32 %b, i1 %bb) {70; CHECK-SD-LABEL: neg_select_negb:71; CHECK-SD: // %bb.0:72; CHECK-SD-NEXT: tst w2, #0x173; CHECK-SD-NEXT: csneg w0, w1, w0, eq74; CHECK-SD-NEXT: ret75;76; CHECK-GI-LABEL: neg_select_negb:77; CHECK-GI: // %bb.0:78; CHECK-GI-NEXT: and w8, w2, #0x179; CHECK-GI-NEXT: tst w8, #0x180; CHECK-GI-NEXT: csneg w8, w0, w1, ne81; CHECK-GI-NEXT: neg w0, w882; CHECK-GI-NEXT: ret83 %negb = sub i32 0, %b84 %sel = select i1 %bb, i32 %a, i32 %negb85 %res = sub i32 0, %sel86 ret i32 %res87}88 89define i32 @neg_select_ab(i32 %a, i32 %b, i1 %bb) {90; CHECK-SD-LABEL: neg_select_ab:91; CHECK-SD: // %bb.0:92; CHECK-SD-NEXT: tst w2, #0x193; CHECK-SD-NEXT: csel w8, w0, w1, ne94; CHECK-SD-NEXT: neg w0, w895; CHECK-SD-NEXT: ret96;97; CHECK-GI-LABEL: neg_select_ab:98; CHECK-GI: // %bb.0:99; CHECK-GI-NEXT: and w8, w2, #0x1100; CHECK-GI-NEXT: tst w8, #0x1101; CHECK-GI-NEXT: csel w8, w0, w1, ne102; CHECK-GI-NEXT: neg w0, w8103; CHECK-GI-NEXT: ret104 %sel = select i1 %bb, i32 %a, i32 %b105 %res = sub i32 0, %sel106 ret i32 %res107}108 109define i32 @neg_select_nega_with_use(i32 %a, i32 %b, i1 %bb) {110; CHECK-SD-LABEL: neg_select_nega_with_use:111; CHECK-SD: // %bb.0:112; CHECK-SD-NEXT: tst w2, #0x1113; CHECK-SD-NEXT: neg w8, w0114; CHECK-SD-NEXT: csneg w9, w1, w0, eq115; CHECK-SD-NEXT: sub w0, w8, w9116; CHECK-SD-NEXT: ret117;118; CHECK-GI-LABEL: neg_select_nega_with_use:119; CHECK-GI: // %bb.0:120; CHECK-GI-NEXT: and w8, w2, #0x1121; CHECK-GI-NEXT: tst w8, #0x1122; CHECK-GI-NEXT: neg w8, w0123; CHECK-GI-NEXT: csneg w9, w1, w0, eq124; CHECK-GI-NEXT: sub w0, w8, w9125; CHECK-GI-NEXT: ret126 %nega = sub i32 0, %a127 %sel = select i1 %bb, i32 %nega, i32 %b128 %nsel = sub i32 0, %sel129 %res = add i32 %nsel, %nega130 ret i32 %res131}132;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:133; CHECK: {{.*}}134