Skip to content

Commit ab98b8c

Browse files
committed
Initial attemp for sub
1 parent 16dd818 commit ab98b8c

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

llvm/lib/CodeGen/GlobalISel/GISelValueTracking.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1959,6 +1959,20 @@ unsigned GISelValueTracking::computeNumSignBits(Register R,
19591959

19601960
break;
19611961
}
1962+
case TargetOpcode::G_SUB: {
1963+
Register Src1 = MI.getOperand(1).getReg();
1964+
unsigned Src1NumSignBits =
1965+
computeNumSignBits(Src1, DemandedElts, Depth + 1);
1966+
if (Src1NumSignBits != 1) {
1967+
Register Src2 = MI.getOperand(2).getReg();
1968+
unsigned Src2NumSignBits =
1969+
computeNumSignBits(Src2, DemandedElts, Depth + 1);
1970+
if (Src2NumSignBits == 1)
1971+
return 1; // Early out.
1972+
FirstAnswer = std::min(Src1NumSignBits, Src2NumSignBits) - 1;
1973+
}
1974+
break;
1975+
}
19621976
case TargetOpcode::G_FCMP:
19631977
case TargetOpcode::G_ICMP: {
19641978
bool IsFP = Opcode == TargetOpcode::G_FCMP;

llvm/test/CodeGen/AArch64/GlobalISel/knownbits-sub.mir

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ body: |
8282
; CHECK-NEXT: %1:_ KnownBits:00001111 SignBits:4
8383
; CHECK-NEXT: %2:_ KnownBits:0000???? SignBits:4
8484
; CHECK-NEXT: %3:_ KnownBits:00000000 SignBits:8
85-
; CHECK-NEXT: %4:_ KnownBits:???????? SignBits:1
85+
; CHECK-NEXT: %4:_ KnownBits:???????? SignBits:3
8686
%0:_(s8) = COPY $b0
8787
%1:_(s8) = G_CONSTANT i8 15
8888
%2:_(s8) = G_AND %0, %1
@@ -110,7 +110,7 @@ body: |
110110
; CHECK-NEXT: %1:_ KnownBits:00001111 SignBits:4
111111
; CHECK-NEXT: %2:_ KnownBits:0000???? SignBits:4
112112
; CHECK-NEXT: %3:_ KnownBits:00000101 SignBits:5
113-
; CHECK-NEXT: %4:_ KnownBits:???????? SignBits:1
113+
; CHECK-NEXT: %4:_ KnownBits:???????? SignBits:3
114114
%0:_(s8) = COPY $b0
115115
%1:_(s8) = G_CONSTANT i8 15
116116
%2:_(s8) = G_AND %0, %1
@@ -154,7 +154,7 @@ body: |
154154
; CHECK-NEXT: %3:_ KnownBits:00000000???????? SignBits:8
155155
; CHECK-NEXT: %4:_ KnownBits:0000000000000000 SignBits:16
156156
; CHECK-NEXT: %5:_ KnownBits:0000000000000000 SignBits:16
157-
; CHECK-NEXT: %6:_ KnownBits:???????????????? SignBits:1
157+
; CHECK-NEXT: %6:_ KnownBits:???????????????? SignBits:7
158158
%0:_(<4 x s16>) = COPY $d0
159159
%1:_(s16) = G_CONSTANT i16 255
160160
%2:_(<4 x s16>) = G_BUILD_VECTOR %1, %1, %1, %1
@@ -189,7 +189,7 @@ body: |
189189
; CHECK-NEXT: %4:_ KnownBits:0000000000101010 SignBits:10
190190
; CHECK-NEXT: %5:_ KnownBits:0000000001001010 SignBits:9
191191
; CHECK-NEXT: %6:_ KnownBits:000000000??01010 SignBits:9
192-
; CHECK-NEXT: %7:_ KnownBits:???????????????? SignBits:1
192+
; CHECK-NEXT: %7:_ KnownBits:???????????????? SignBits:7
193193
%0:_(<4 x s16>) = COPY $d0
194194
%1:_(s16) = G_CONSTANT i16 255
195195
%2:_(<4 x s16>) = G_BUILD_VECTOR %1, %1, %1, %1
@@ -208,7 +208,7 @@ body: |
208208
; CHECK-NEXT: %1:_ KnownBits:0000000000000110 SignBits:13
209209
; CHECK-NEXT: %2:_ KnownBits:0000000000000?1? SignBits:13
210210
; CHECK-NEXT: %3:_ KnownBits:0000000000000?1? SignBits:13
211-
; CHECK-NEXT: %4:_ KnownBits:???????????????? SignBits:1
211+
; CHECK-NEXT: %4:_ KnownBits:???????????????? SignBits:12
212212
%0:_(s16) = G_CONSTANT i16 3
213213
%1:_(s16) = G_CONSTANT i16 6
214214
%2:_(<4 x s16>) = G_BUILD_VECTOR %0, %1, %1, %0

0 commit comments

Comments
 (0)