Skip to content

Commit 02bb3fa

Browse files
committed
[HashRecognize] Really fix BE tables, strengthen getRecurrences
1 parent 0449f97 commit 02bb3fa

File tree

2 files changed

+68
-65
lines changed

2 files changed

+68
-65
lines changed

llvm/lib/Analysis/HashRecognize.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,8 @@ getRecurrences(BasicBlock *LoopLatch, const PHINode *IndVar, const Loop &L) {
434434
ConditionalRecurrence.matchConditionalRecurrence(
435435
&P, Instruction::BinaryOps::Xor);
436436
}
437+
if (NumPhis == 3 && (!SimpleRecurrence || !ConditionalRecurrence))
438+
return {};
437439
return std::make_pair(SimpleRecurrence, ConditionalRecurrence);
438440
}
439441

@@ -469,9 +471,9 @@ CRCTable HashRecognize::genSarwateTable(const APInt &GenPoly,
469471
unsigned BW = GenPoly.getBitWidth();
470472
CRCTable Table;
471473
Table[0] = APInt::getZero(BW);
472-
APInt CRCInit(BW, 1);
473474

474475
if (ByteOrderSwapped) {
476+
APInt CRCInit(BW, 128);
475477
for (unsigned I = 1; I < 256; I <<= 1) {
476478
CRCInit = CRCInit.shl(1) ^
477479
(CRCInit.isSignBitSet() ? GenPoly : APInt::getZero(BW));
@@ -481,6 +483,7 @@ CRCTable HashRecognize::genSarwateTable(const APInt &GenPoly,
481483
return Table;
482484
}
483485

486+
APInt CRCInit(BW, 1);
484487
for (unsigned I = 128; I; I >>= 1) {
485488
CRCInit = CRCInit.lshr(1) ^ (CRCInit[0] ? GenPoly : APInt::getZero(BW));
486489
for (unsigned J = 0; J < 256; J += (I << 1))

llvm/test/Analysis/HashRecognize/cyclic-redundancy-check.ll

Lines changed: 64 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -151,22 +151,22 @@ define i16 @crc16.be.tc8.crc.init.li(i16 %checksum, i8 %msg) {
151151
; CHECK-NEXT: Generating polynomial: 4129
152152
; CHECK-NEXT: Computed CRC: %crc.next = select i1 %check.sb, i16 %crc.xor, i16 %crc.shl
153153
; CHECK-NEXT: Computed CRC lookup table:
154-
; CHECK-NEXT: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
155-
; CHECK-NEXT: 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62
156-
; CHECK-NEXT: 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94
157-
; CHECK-NEXT: 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126
158-
; CHECK-NEXT: 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158
159-
; CHECK-NEXT: 160 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190
160-
; CHECK-NEXT: 192 194 196 198 200 202 204 206 208 210 212 214 216 218 220 222
161-
; CHECK-NEXT: 224 226 228 230 232 234 236 238 240 242 244 246 248 250 252 254
162-
; CHECK-NEXT: 256 258 260 262 264 266 268 270 272 274 276 278 280 282 284 286
163-
; CHECK-NEXT: 288 290 292 294 296 298 300 302 304 306 308 310 312 314 316 318
164-
; CHECK-NEXT: 320 322 324 326 328 330 332 334 336 338 340 342 344 346 348 350
165-
; CHECK-NEXT: 352 354 356 358 360 362 364 366 368 370 372 374 376 378 380 382
166-
; CHECK-NEXT: 384 386 388 390 392 394 396 398 400 402 404 406 408 410 412 414
167-
; CHECK-NEXT: 416 418 420 422 424 426 428 430 432 434 436 438 440 442 444 446
168-
; CHECK-NEXT: 448 450 452 454 456 458 460 462 464 466 468 470 472 474 476 478
169-
; CHECK-NEXT: 480 482 484 486 488 490 492 494 496 498 500 502 504 506 508 510
154+
; CHECK-NEXT: 0 256 512 768 1024 1280 1536 1792 2048 2304 2560 2816 3072 3328 3584 3840
155+
; CHECK-NEXT: 4096 4352 4608 4864 5120 5376 5632 5888 6144 6400 6656 6912 7168 7424 7680 7936
156+
; CHECK-NEXT: 8192 8448 8704 8960 9216 9472 9728 9984 10240 10496 10752 11008 11264 11520 11776 12032
157+
; CHECK-NEXT: 12288 12544 12800 13056 13312 13568 13824 14080 14336 14592 14848 15104 15360 15616 15872 16128
158+
; CHECK-NEXT: 16384 16640 16896 17152 17408 17664 17920 18176 18432 18688 18944 19200 19456 19712 19968 20224
159+
; CHECK-NEXT: 20480 20736 20992 21248 21504 21760 22016 22272 22528 22784 23040 23296 23552 23808 24064 24320
160+
; CHECK-NEXT: 24576 24832 25088 25344 25600 25856 26112 26368 26624 26880 27136 27392 27648 27904 28160 28416
161+
; CHECK-NEXT: 28672 28928 29184 29440 29696 29952 30208 30464 30720 30976 31232 31488 31744 32000 32256 32512
162+
; CHECK-NEXT: 32768 33024 33280 33536 33792 34048 34304 34560 34816 35072 35328 35584 35840 36096 36352 36608
163+
; CHECK-NEXT: 36864 37120 37376 37632 37888 38144 38400 38656 38912 39168 39424 39680 39936 40192 40448 40704
164+
; CHECK-NEXT: 40960 41216 41472 41728 41984 42240 42496 42752 43008 43264 43520 43776 44032 44288 44544 44800
165+
; CHECK-NEXT: 45056 45312 45568 45824 46080 46336 46592 46848 47104 47360 47616 47872 48128 48384 48640 48896
166+
; CHECK-NEXT: 49152 49408 49664 49920 50176 50432 50688 50944 51200 51456 51712 51968 52224 52480 52736 52992
167+
; CHECK-NEXT: 53248 53504 53760 54016 54272 54528 54784 55040 55296 55552 55808 56064 56320 56576 56832 57088
168+
; CHECK-NEXT: 57344 57600 57856 58112 58368 58624 58880 59136 59392 59648 59904 60160 60416 60672 60928 61184
169+
; CHECK-NEXT: 61440 61696 61952 62208 62464 62720 62976 63232 63488 63744 64000 64256 64512 64768 65024 65280
170170
;
171171
entry:
172172
%msg.ext = zext i8 %msg to i16
@@ -196,22 +196,22 @@ define i16 @crc16.be.tc8.crc.init.arg(i16 %crc.init) {
196196
; CHECK-NEXT: Generating polynomial: 4129
197197
; CHECK-NEXT: Computed CRC: %crc.next = select i1 %check.sb, i16 %crc.xor, i16 %crc.shl
198198
; CHECK-NEXT: Computed CRC lookup table:
199-
; CHECK-NEXT: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
200-
; CHECK-NEXT: 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62
201-
; CHECK-NEXT: 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94
202-
; CHECK-NEXT: 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126
203-
; CHECK-NEXT: 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158
204-
; CHECK-NEXT: 160 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190
205-
; CHECK-NEXT: 192 194 196 198 200 202 204 206 208 210 212 214 216 218 220 222
206-
; CHECK-NEXT: 224 226 228 230 232 234 236 238 240 242 244 246 248 250 252 254
207-
; CHECK-NEXT: 256 258 260 262 264 266 268 270 272 274 276 278 280 282 284 286
208-
; CHECK-NEXT: 288 290 292 294 296 298 300 302 304 306 308 310 312 314 316 318
209-
; CHECK-NEXT: 320 322 324 326 328 330 332 334 336 338 340 342 344 346 348 350
210-
; CHECK-NEXT: 352 354 356 358 360 362 364 366 368 370 372 374 376 378 380 382
211-
; CHECK-NEXT: 384 386 388 390 392 394 396 398 400 402 404 406 408 410 412 414
212-
; CHECK-NEXT: 416 418 420 422 424 426 428 430 432 434 436 438 440 442 444 446
213-
; CHECK-NEXT: 448 450 452 454 456 458 460 462 464 466 468 470 472 474 476 478
214-
; CHECK-NEXT: 480 482 484 486 488 490 492 494 496 498 500 502 504 506 508 510
199+
; CHECK-NEXT: 0 256 512 768 1024 1280 1536 1792 2048 2304 2560 2816 3072 3328 3584 3840
200+
; CHECK-NEXT: 4096 4352 4608 4864 5120 5376 5632 5888 6144 6400 6656 6912 7168 7424 7680 7936
201+
; CHECK-NEXT: 8192 8448 8704 8960 9216 9472 9728 9984 10240 10496 10752 11008 11264 11520 11776 12032
202+
; CHECK-NEXT: 12288 12544 12800 13056 13312 13568 13824 14080 14336 14592 14848 15104 15360 15616 15872 16128
203+
; CHECK-NEXT: 16384 16640 16896 17152 17408 17664 17920 18176 18432 18688 18944 19200 19456 19712 19968 20224
204+
; CHECK-NEXT: 20480 20736 20992 21248 21504 21760 22016 22272 22528 22784 23040 23296 23552 23808 24064 24320
205+
; CHECK-NEXT: 24576 24832 25088 25344 25600 25856 26112 26368 26624 26880 27136 27392 27648 27904 28160 28416
206+
; CHECK-NEXT: 28672 28928 29184 29440 29696 29952 30208 30464 30720 30976 31232 31488 31744 32000 32256 32512
207+
; CHECK-NEXT: 32768 33024 33280 33536 33792 34048 34304 34560 34816 35072 35328 35584 35840 36096 36352 36608
208+
; CHECK-NEXT: 36864 37120 37376 37632 37888 38144 38400 38656 38912 39168 39424 39680 39936 40192 40448 40704
209+
; CHECK-NEXT: 40960 41216 41472 41728 41984 42240 42496 42752 43008 43264 43520 43776 44032 44288 44544 44800
210+
; CHECK-NEXT: 45056 45312 45568 45824 46080 46336 46592 46848 47104 47360 47616 47872 48128 48384 48640 48896
211+
; CHECK-NEXT: 49152 49408 49664 49920 50176 50432 50688 50944 51200 51456 51712 51968 52224 52480 52736 52992
212+
; CHECK-NEXT: 53248 53504 53760 54016 54272 54528 54784 55040 55296 55552 55808 56064 56320 56576 56832 57088
213+
; CHECK-NEXT: 57344 57600 57856 58112 58368 58624 58880 59136 59392 59648 59904 60160 60416 60672 60928 61184
214+
; CHECK-NEXT: 61440 61696 61952 62208 62464 62720 62976 63232 63488 63744 64000 64256 64512 64768 65024 65280
215215
;
216216
entry:
217217
br label %loop
@@ -238,22 +238,22 @@ define i16 @crc16.be.tc8.crc.init.arg.flipped.sb.check(i16 %crc.init) {
238238
; CHECK-NEXT: Generating polynomial: 4129
239239
; CHECK-NEXT: Computed CRC: %crc.next = select i1 %check.sb, i16 %crc.shl, i16 %crc.xor
240240
; CHECK-NEXT: Computed CRC lookup table:
241-
; CHECK-NEXT: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
242-
; CHECK-NEXT: 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62
243-
; CHECK-NEXT: 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94
244-
; CHECK-NEXT: 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126
245-
; CHECK-NEXT: 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158
246-
; CHECK-NEXT: 160 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190
247-
; CHECK-NEXT: 192 194 196 198 200 202 204 206 208 210 212 214 216 218 220 222
248-
; CHECK-NEXT: 224 226 228 230 232 234 236 238 240 242 244 246 248 250 252 254
249-
; CHECK-NEXT: 256 258 260 262 264 266 268 270 272 274 276 278 280 282 284 286
250-
; CHECK-NEXT: 288 290 292 294 296 298 300 302 304 306 308 310 312 314 316 318
251-
; CHECK-NEXT: 320 322 324 326 328 330 332 334 336 338 340 342 344 346 348 350
252-
; CHECK-NEXT: 352 354 356 358 360 362 364 366 368 370 372 374 376 378 380 382
253-
; CHECK-NEXT: 384 386 388 390 392 394 396 398 400 402 404 406 408 410 412 414
254-
; CHECK-NEXT: 416 418 420 422 424 426 428 430 432 434 436 438 440 442 444 446
255-
; CHECK-NEXT: 448 450 452 454 456 458 460 462 464 466 468 470 472 474 476 478
256-
; CHECK-NEXT: 480 482 484 486 488 490 492 494 496 498 500 502 504 506 508 510
241+
; CHECK-NEXT: 0 256 512 768 1024 1280 1536 1792 2048 2304 2560 2816 3072 3328 3584 3840
242+
; CHECK-NEXT: 4096 4352 4608 4864 5120 5376 5632 5888 6144 6400 6656 6912 7168 7424 7680 7936
243+
; CHECK-NEXT: 8192 8448 8704 8960 9216 9472 9728 9984 10240 10496 10752 11008 11264 11520 11776 12032
244+
; CHECK-NEXT: 12288 12544 12800 13056 13312 13568 13824 14080 14336 14592 14848 15104 15360 15616 15872 16128
245+
; CHECK-NEXT: 16384 16640 16896 17152 17408 17664 17920 18176 18432 18688 18944 19200 19456 19712 19968 20224
246+
; CHECK-NEXT: 20480 20736 20992 21248 21504 21760 22016 22272 22528 22784 23040 23296 23552 23808 24064 24320
247+
; CHECK-NEXT: 24576 24832 25088 25344 25600 25856 26112 26368 26624 26880 27136 27392 27648 27904 28160 28416
248+
; CHECK-NEXT: 28672 28928 29184 29440 29696 29952 30208 30464 30720 30976 31232 31488 31744 32000 32256 32512
249+
; CHECK-NEXT: 32768 33024 33280 33536 33792 34048 34304 34560 34816 35072 35328 35584 35840 36096 36352 36608
250+
; CHECK-NEXT: 36864 37120 37376 37632 37888 38144 38400 38656 38912 39168 39424 39680 39936 40192 40448 40704
251+
; CHECK-NEXT: 40960 41216 41472 41728 41984 42240 42496 42752 43008 43264 43520 43776 44032 44288 44544 44800
252+
; CHECK-NEXT: 45056 45312 45568 45824 46080 46336 46592 46848 47104 47360 47616 47872 48128 48384 48640 48896
253+
; CHECK-NEXT: 49152 49408 49664 49920 50176 50432 50688 50944 51200 51456 51712 51968 52224 52480 52736 52992
254+
; CHECK-NEXT: 53248 53504 53760 54016 54272 54528 54784 55040 55296 55552 55808 56064 56320 56576 56832 57088
255+
; CHECK-NEXT: 57344 57600 57856 58112 58368 58624 58880 59136 59392 59648 59904 60160 60416 60672 60928 61184
256+
; CHECK-NEXT: 61440 61696 61952 62208 62464 62720 62976 63232 63488 63744 64000 64256 64512 64768 65024 65280
257257
;
258258
entry:
259259
br label %loop
@@ -280,22 +280,22 @@ define i8 @crc8.be.tc8.ptr.nested.loop(ptr %msg, i32 %loop.limit) {
280280
; CHECK-NEXT: Generating polynomial: 29
281281
; CHECK-NEXT: Computed CRC: %crc.next = select i1 %check.sb, i8 %crc.xor, i8 %crc.shl
282282
; CHECK-NEXT: Computed CRC lookup table:
283-
; CHECK-NEXT: 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30
284-
; CHECK-NEXT: 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62
285-
; CHECK-NEXT: 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94
286-
; CHECK-NEXT: 96 98 100 102 104 106 108 110 112 114 116 118 120 122 124 126
287-
; CHECK-NEXT: 128 130 132 134 136 138 140 142 144 146 148 150 152 154 156 158
288-
; CHECK-NEXT: 160 162 164 166 168 170 172 174 176 178 180 182 184 186 188 190
289-
; CHECK-NEXT: 192 194 196 198 200 202 204 206 208 210 212 214 216 218 220 222
290-
; CHECK-NEXT: 224 226 228 230 232 234 236 238 240 242 244 246 248 250 252 254
291-
; CHECK-NEXT: 29 31 25 27 21 23 17 19 13 15 9 11 5 7 1 3
292-
; CHECK-NEXT: 61 63 57 59 53 55 49 51 45 47 41 43 37 39 33 35
293-
; CHECK-NEXT: 93 95 89 91 85 87 81 83 77 79 73 75 69 71 65 67
294-
; CHECK-NEXT: 125 127 121 123 117 119 113 115 109 111 105 107 101 103 97 99
295-
; CHECK-NEXT: 157 159 153 155 149 151 145 147 141 143 137 139 133 135 129 131
296-
; CHECK-NEXT: 189 191 185 187 181 183 177 179 173 175 169 171 165 167 161 163
297-
; CHECK-NEXT: 221 223 217 219 213 215 209 211 205 207 201 203 197 199 193 195
298-
; CHECK-NEXT: 253 255 249 251 245 247 241 243 237 239 233 235 229 231 225 227
283+
; CHECK-NEXT: 0 29 58 39 116 105 78 83 232 245 210 207 156 129 166 187
284+
; CHECK-NEXT: 205 208 247 234 185 164 131 158 37 56 31 2 81 76 107 118
285+
; CHECK-NEXT: 135 154 189 160 243 238 201 212 111 114 85 72 27 6 33 60
286+
; CHECK-NEXT: 74 87 112 109 62 35 4 25 162 191 152 133 214 203 236 241
287+
; CHECK-NEXT: 19 14 41 52 103 122 93 64 251 230 193 220 143 146 181 168
288+
; CHECK-NEXT: 222 195 228 249 170 183 144 141 54 43 12 17 66 95 120 101
289+
; CHECK-NEXT: 148 137 174 179 224 253 218 199 124 97 70 91 8 21 50 47
290+
; CHECK-NEXT: 89 68 99 126 45 48 23 10 177 172 139 150 197 216 255 226
291+
; CHECK-NEXT: 38 59 28 1 82 79 104 117 206 211 244 233 186 167 128 157
292+
; CHECK-NEXT: 235 246 209 204 159 130 165 184 3 30 57 36 119 106 77 80
293+
; CHECK-NEXT: 161 188 155 134 213 200 239 242 73 84 115 110 61 32 7 26
294+
; CHECK-NEXT: 108 113 86 75 24 5 34 63 132 153 190 163 240 237 202 215
295+
; CHECK-NEXT: 53 40 15 18 65 92 123 102 221 192 231 250 169 180 147 142
296+
; CHECK-NEXT: 248 229 194 223 140 145 182 171 16 13 42 55 100 121 94 67
297+
; CHECK-NEXT: 178 175 136 149 198 219 252 225 90 71 96 125 46 51 20 9
298+
; CHECK-NEXT: 127 98 69 88 11 22 49 44 151 138 173 176 227 254 217 196
299299
;
300300
entry:
301301
br label %outer.loop

0 commit comments

Comments
 (0)