xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/llvm-ir/sub.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips2 | FileCheck %s \
2*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=NOT-R2-R6,GP32,GP32-NOT-MM,NOT-MM
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32 | FileCheck %s \
4*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=NOT-R2-R6,GP32,GP32-NOT-MM,NOT-MM
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r2 | FileCheck %s \
6*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=R2-R6,GP32,GP32-NOT-MM,NOT-MM
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r3 | FileCheck %s \
8*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=R2-R6,GP32,GP32-NOT-MM,NOT-MM
9*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r5 | FileCheck %s \
10*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=R2-R6,GP32,GP32-NOT-MM,NOT-MM
11*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r6 | FileCheck %s \
12*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=R2-R6,GP32,GP32-NOT-MM,NOT-MM
13*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r3 -mattr=+micromips | FileCheck %s \
14*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=GP32-MM,GP32,MM
15*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r6 -mattr=+micromips | FileCheck %s \
16*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=GP32-MM,GP32,MM
17*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips3 | FileCheck %s \
18*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=NOT-R2-R6,GP64,NOT-MM
19*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips4 | FileCheck %s \
20*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=NOT-R2-R6,GP64,NOT-MM
21*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64 | FileCheck %s \
22*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=NOT-R2-R6,GP64,NOT-MM
23*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r2 | FileCheck %s \
24*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=R2-R6,GP64,NOT-MM
25*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r3 | FileCheck %s \
26*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=R2-R6,GP64,NOT-MM
27*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r5 | FileCheck %s \
28*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=R2-R6,GP64,NOT-MM
29*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r6 | FileCheck %s \
30*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=R2-R6,GP64,NOT-MM
31*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r6 -mattr=+micromips | FileCheck %s \
32*9880d681SAndroid Build Coastguard Worker; RUN:    -check-prefixes=GP64,MM
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerdefine signext i1 @sub_i1(i1 signext %a, i1 signext %b) {
35*9880d681SAndroid Build Coastguard Workerentry:
36*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sub_i1:
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker  ; NOT-MM:         subu    $[[T0:[0-9]+]], $4, $5
39*9880d681SAndroid Build Coastguard Worker  ; NOT-MM:         sll     $[[T0]], $[[T0]], 31
40*9880d681SAndroid Build Coastguard Worker  ; NOT-MM:         sra     $2, $[[T0]], 31
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Worker  ; MM:             subu16  $[[T0:[0-9]+]], $4, $5
43*9880d681SAndroid Build Coastguard Worker  ; MM:             sll     $[[T1:[0-9]+]], $[[T0]], 31
44*9880d681SAndroid Build Coastguard Worker  ; MM:             sra     $[[T0]], $[[T1]], 31
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Worker  %r = sub i1 %a, %b
47*9880d681SAndroid Build Coastguard Worker  ret i1 %r
48*9880d681SAndroid Build Coastguard Worker}
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Workerdefine signext i8 @sub_i8(i8 signext %a, i8 signext %b) {
51*9880d681SAndroid Build Coastguard Workerentry:
52*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sub_i8:
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:      subu    $[[T0:[0-9]+]], $4, $5
55*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:      sll     $[[T0]], $[[T0]], 24
56*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:      sra     $2, $[[T0]], 24
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker  ; R2-R6:          subu    $[[T0:[0-9]+]], $4, $5
59*9880d681SAndroid Build Coastguard Worker  ; R2-R6:          seb     $2, $[[T0:[0-9]+]]
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker  ; MM:             subu16  $[[T0:[0-9]+]], $4, $5
62*9880d681SAndroid Build Coastguard Worker  ; MM:             seb     $[[T0]], $[[T0]]
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker  %r = sub i8 %a, %b
65*9880d681SAndroid Build Coastguard Worker  ret i8 %r
66*9880d681SAndroid Build Coastguard Worker}
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Workerdefine signext i16 @sub_i16(i16 signext %a, i16 signext %b) {
69*9880d681SAndroid Build Coastguard Workerentry:
70*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sub_i16:
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:      subu    $[[T0:[0-9]+]], $4, $5
73*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:      sll     $[[T0]], $[[T0]], 16
74*9880d681SAndroid Build Coastguard Worker  ; NOT-R2-R6:      sra     $2, $[[T0]], 16
75*9880d681SAndroid Build Coastguard Worker
76*9880d681SAndroid Build Coastguard Worker  ; R2-R6:          subu    $[[T0:[0-9]+]], $4, $5
77*9880d681SAndroid Build Coastguard Worker  ; R2-R6:          seh     $2, $[[T0:[0-9]+]]
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker  ; MM:             subu16  $[[T0:[0-9]+]], $4, $5
80*9880d681SAndroid Build Coastguard Worker  ; MM:             seh     $[[T0]], $[[T0]]
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Worker  %r = sub i16 %a, %b
83*9880d681SAndroid Build Coastguard Worker  ret i16 %r
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Workerdefine signext i32 @sub_i32(i32 signext %a, i32 signext %b) {
87*9880d681SAndroid Build Coastguard Workerentry:
88*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sub_i32:
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Worker  ; NOT-MM:         subu    $2, $4, $5
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker  ; MM:             subu16  $2, $4, $5
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker  %r = sub i32 %a, %b
95*9880d681SAndroid Build Coastguard Worker  ret i32 %r
96*9880d681SAndroid Build Coastguard Worker}
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerdefine signext i64 @sub_i64(i64 signext %a, i64 signext %b) {
99*9880d681SAndroid Build Coastguard Workerentry:
100*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sub_i64:
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker  ; GP32:           subu    $3, $5, $7
103*9880d681SAndroid Build Coastguard Worker  ; GP32:           sltu    $[[T0:[0-9]+]], $5, $7
104*9880d681SAndroid Build Coastguard Worker  ; GP32:           addu    $[[T1:[0-9]+]], $[[T0]], $6
105*9880d681SAndroid Build Coastguard Worker  ; GP32:           subu    $2, $4, $[[T1]]
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker  ; GP64:           dsubu   $2, $4, $5
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker  %r = sub i64 %a, %b
110*9880d681SAndroid Build Coastguard Worker  ret i64 %r
111*9880d681SAndroid Build Coastguard Worker}
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Workerdefine signext i128 @sub_i128(i128 signext %a, i128 signext %b) {
114*9880d681SAndroid Build Coastguard Workerentry:
115*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: sub_i128:
116*9880d681SAndroid Build Coastguard Worker
117*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    lw        $[[T0:[0-9]+]], 20($sp)
118*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    sltu      $[[T1:[0-9]+]], $5, $[[T0]]
119*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    lw        $[[T2:[0-9]+]], 16($sp)
120*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    addu      $[[T3:[0-9]+]], $[[T1]], $[[T2]]
121*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    lw        $[[T4:[0-9]+]], 24($sp)
122*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    lw        $[[T5:[0-9]+]], 28($sp)
123*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    subu      $[[T6:[0-9]+]], $7, $[[T5]]
124*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    subu      $2, $4, $[[T3]]
125*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    sltu      $[[T8:[0-9]+]], $6, $[[T4]]
126*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    addu      $[[T9:[0-9]+]], $[[T8]], $[[T0]]
127*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    subu      $3, $5, $[[T9]]
128*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    sltu      $[[T10:[0-9]+]], $7, $[[T5]]
129*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    addu      $[[T11:[0-9]+]], $[[T10]], $[[T4]]
130*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    subu      $4, $6, $[[T11]]
131*9880d681SAndroid Build Coastguard Worker  ; GP32-NOT-MM:    move      $5, $[[T6]]
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        lw        $[[T0:[0-9]+]], 20($sp)
134*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        sltu      $[[T1:[0-9]+]], $[[T2:[0-9]+]], $[[T0]]
135*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        lw        $[[T3:[0-9]+]], 16($sp)
136*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        addu      $[[T3]], $[[T1]], $[[T3]]
137*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        lw        $[[T4:[0-9]+]], 28($sp)
138*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        subu      $[[T1]], $7, $[[T4]]
139*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        subu      $[[T3]], $[[T5:[0-9]+]], $[[T3]]
140*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        lw        $[[T5]], 24($sp)
141*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        sltu      $[[T6:[0-9]+]], $6, $[[T5]]
142*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        addu      $[[T0]], $[[T6]], $[[T0]]
143*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        subu      $[[T0]], $5, $[[T0]]
144*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        sltu      $[[T2]], $7, $[[T4]]
145*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        addu      $[[T5]], $[[T2]], $[[T5]]
146*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        subu      $[[T5]], $6, $[[T5]]
147*9880d681SAndroid Build Coastguard Worker  ; GP32-MM:        move      $[[T2]], $[[T1]]
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Worker  ; GP64:           dsubu     $3, $5, $7
150*9880d681SAndroid Build Coastguard Worker  ; GP64:           sltu      $[[T0:[0-9]+]], $5, $7
151*9880d681SAndroid Build Coastguard Worker  ; GP64:           daddu     $[[T1:[0-9]+]], $[[T0]], $6
152*9880d681SAndroid Build Coastguard Worker  ; GP64:           dsubu     $2, $4, $[[T1]]
153*9880d681SAndroid Build Coastguard Worker
154*9880d681SAndroid Build Coastguard Worker  %r = sub i128 %a, %b
155*9880d681SAndroid Build Coastguard Worker  ret i128 %r
156*9880d681SAndroid Build Coastguard Worker}
157