1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA32 3; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA64 4 5;; Exercise the 'sub' LLVM IR: https://llvm.org/docs/LangRef.html#sub-instruction 6 7define i1 @sub_i1(i1 %x, i1 %y) { 8; LA32-LABEL: sub_i1: 9; LA32: # %bb.0: 10; LA32-NEXT: sub.w $a0, $a0, $a1 11; LA32-NEXT: ret 12; 13; LA64-LABEL: sub_i1: 14; LA64: # %bb.0: 15; LA64-NEXT: sub.d $a0, $a0, $a1 16; LA64-NEXT: ret 17 %sub = sub i1 %x, %y 18 ret i1 %sub 19} 20 21define i8 @sub_i8(i8 %x, i8 %y) { 22; LA32-LABEL: sub_i8: 23; LA32: # %bb.0: 24; LA32-NEXT: sub.w $a0, $a0, $a1 25; LA32-NEXT: ret 26; 27; LA64-LABEL: sub_i8: 28; LA64: # %bb.0: 29; LA64-NEXT: sub.d $a0, $a0, $a1 30; LA64-NEXT: ret 31 %sub = sub i8 %x, %y 32 ret i8 %sub 33} 34 35define i16 @sub_i16(i16 %x, i16 %y) { 36; LA32-LABEL: sub_i16: 37; LA32: # %bb.0: 38; LA32-NEXT: sub.w $a0, $a0, $a1 39; LA32-NEXT: ret 40; 41; LA64-LABEL: sub_i16: 42; LA64: # %bb.0: 43; LA64-NEXT: sub.d $a0, $a0, $a1 44; LA64-NEXT: ret 45 %sub = sub i16 %x, %y 46 ret i16 %sub 47} 48 49define i32 @sub_i32(i32 %x, i32 %y) { 50; LA32-LABEL: sub_i32: 51; LA32: # %bb.0: 52; LA32-NEXT: sub.w $a0, $a0, $a1 53; LA32-NEXT: ret 54; 55; LA64-LABEL: sub_i32: 56; LA64: # %bb.0: 57; LA64-NEXT: sub.w $a0, $a0, $a1 58; LA64-NEXT: ret 59 %sub = sub i32 %x, %y 60 ret i32 %sub 61} 62 63;; Match the pattern: 64;; def : PatGprGpr_32<sub, SUB_W>; 65define signext i32 @sub_i32_sext(i32 %x, i32 %y) { 66; LA32-LABEL: sub_i32_sext: 67; LA32: # %bb.0: 68; LA32-NEXT: sub.w $a0, $a0, $a1 69; LA32-NEXT: ret 70; 71; LA64-LABEL: sub_i32_sext: 72; LA64: # %bb.0: 73; LA64-NEXT: sub.w $a0, $a0, $a1 74; LA64-NEXT: ret 75 %sub = sub i32 %x, %y 76 ret i32 %sub 77} 78 79define i64 @sub_i64(i64 %x, i64 %y) { 80; LA32-LABEL: sub_i64: 81; LA32: # %bb.0: 82; LA32-NEXT: sltu $a4, $a0, $a2 83; LA32-NEXT: sub.w $a1, $a1, $a3 84; LA32-NEXT: sub.w $a1, $a1, $a4 85; LA32-NEXT: sub.w $a0, $a0, $a2 86; LA32-NEXT: ret 87; 88; LA64-LABEL: sub_i64: 89; LA64: # %bb.0: 90; LA64-NEXT: sub.d $a0, $a0, $a1 91; LA64-NEXT: ret 92 %sub = sub i64 %x, %y 93 ret i64 %sub 94} 95