Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / Mips / mips3-spill-slot.ll
blob4eabbeb867e38e49e31c58c5595e18f552d200f2
1 ; RUN: llc -march=mips64 -mcpu=mips3 < %s 2>&1 | FileCheck %s --check-prefix=CHECK
2 ; This testcase is from PR35859.
3 ; Check that spill slot has the correct size for mips3 and n64 ABI.
4 ; Previously, this test case would fail during register
5 ; scavenging due to wrong spill slot size.
7 ; CHECK-NOT: Cannot scavenge register without an emergency spill slot!
9 @n = external local_unnamed_addr global ptr, align 8
11 define void @o(ptr nocapture readonly %a, ptr %b) local_unnamed_addr {
12 entry:
13   %0 = load i32, ptr undef, align 4
14   %and12 = and i32 %0, 67295
15   %1 = zext i32 %and12 to i64
16   %conv16 = sext i32 %0 to i64
17   %2 = ptrtoint ptr %b to i64
18   %mul22 = mul nsw i64 %1, %2
19   %mul23 = mul nsw i64 %conv16, %2
20   %tobool25 = icmp ne i64 %mul22, 0
21   %inc27 = zext i1 %tobool25 to i64
22   %3 = load ptr, ptr @n, align 8
23   %arrayidx36 = getelementptr inbounds i32, ptr %3, i64 4
24   store i32 0, ptr %arrayidx36, align 4
25   %spec.select = add i64 0, %mul23
26   %hi14.0 = add i64 %spec.select, %inc27
27   %add51 = add i64 %hi14.0, 0
28   %4 = load i32, ptr null, align 4
29   %and59 = and i32 %4, 67295
30   %5 = zext i32 %and59 to i64
31   %conv63 = sext i32 %4 to i64
32   %6 = load i64, ptr %b, align 8
33   %mul71 = mul nsw i64 %6, %5
34   %mul72 = mul nsw i64 %6, %conv63
35   %tobool74 = icmp ne i64 %mul71, 0
36   %inc76 = zext i1 %tobool74 to i64
37   %arrayidx85 = getelementptr inbounds i32, ptr %a, i64 5
38   %7 = load i32, ptr %arrayidx85, align 4
39   %and86 = and i32 %7, 67295
40   %conv90 = sext i32 %7 to i64
41   %8 = load i64, ptr undef, align 8
42   %mul99 = mul nsw i64 %8, %conv90
43   %9 = load i32, ptr undef, align 4
44   %and113 = and i32 %9, 67295
45   %tobool126 = icmp eq i32 %and113, 0
46   %spec.select397.v = select i1 %tobool126, i64 2, i64 3
47   %10 = load i32, ptr undef, align 4
48   %and138 = and i32 %10, 67295
49   %11 = zext i32 %and138 to i64
50   %conv142 = sext i32 %10 to i64
51   %12 = load i64, ptr null, align 8
52   %mul150 = mul nsw i64 %12, %11
53   %mul151 = mul nsw i64 %12, %conv142
54   %tobool153 = icmp ne i64 %mul150, 0
55   %inc155 = zext i1 %tobool153 to i64
56   %add157 = add nsw i64 0, %11
57   %spec.select398 = add i64 0, %mul72
58   %hi140.0 = add i64 %spec.select398, %8
59   %spec.select397 = add i64 %hi140.0, %mul99
60   %hi115.0 = add i64 %spec.select397, %inc76
61   %add100 = add i64 %hi115.0, 0
62   %spec.select396 = add i64 %add100, %12
63   %hi88.0 = add i64 %spec.select396, 0
64   %add73 = add i64 %hi88.0, %spec.select397.v
65   %spec.select395 = add i64 %add73, %mul151
66   %hi61.0 = add i64 %spec.select395, %inc155
67   %add83 = add i64 %hi61.0, 0
68   %add110 = add i64 %add83, 0
69   %add135 = add i64 %add110, 0
70   %add162 = add i64 %add135, 0
71   %13 = load i32, ptr null, align 4
72   %and165 = and i32 %13, 67295
73   %14 = zext i32 %and165 to i64
74   %conv169 = sext i32 %13 to i64
75   %mul175 = mul nsw i64 %14, %2
76   %mul176 = mul nsw i64 %conv169, %2
77   %tobool178 = icmp ne i64 %mul175, 0
78   %inc180 = zext i1 %tobool178 to i64
79   %add182 = sub nsw i64 0, %14
80   %tobool183 = icmp ne i64 %add162, %add182
81   %inc185 = zext i1 %tobool183 to i64
82   %add177 = add i64 %add51, %2
83   %spec.select399 = add i64 %add177, %mul176
84   %hi167.0 = add i64 %spec.select399, %inc180
85   %add187 = add i64 %hi167.0, %inc185
86   %tobool203 = icmp eq i32 %and86, 0
87   %spec.select400.v = select i1 %tobool203, i64 3, i64 4
88   %spec.select400 = add nsw i64 %spec.select400.v, 0
89   %tobool208 = icmp ne i64 %add187, 0
90   %inc210 = zext i1 %tobool208 to i64
91   %hi192.0 = add i64 %spec.select400, %add157
92   %add212 = add i64 %hi192.0, %inc210
93   %15 = inttoptr i64 %add212 to ptr
94   store ptr %15, ptr @n, align 8
95   ret void