|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5 |
2 | 2 | ; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa 2>&1 \ |
3 | | -; RUN: | FileCheck %s |
| 3 | +; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-ALL |
| 4 | +; RUN: opt < %s -disable-output "-passes=print<da>" -aa-pipeline=basic-aa -da-enable-dependence-test=strong-siv 2>&1 \ |
| 5 | +; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-STRONG-SIV |
4 | 6 |
|
5 | 7 | target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" |
6 | 8 | target triple = "x86_64-apple-macosx10.6.0" |
@@ -423,19 +425,33 @@ for.end: ; preds = %for.body |
423 | 425 | ;; *B++ = A[i + 2*n]; |
424 | 426 |
|
425 | 427 | define void @strong9(ptr %A, ptr %B, i64 %n) nounwind uwtable ssp { |
426 | | -; CHECK-LABEL: 'strong9' |
427 | | -; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4 |
428 | | -; CHECK-NEXT: da analyze - none! |
429 | | -; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4 |
430 | | -; CHECK-NEXT: da analyze - none! |
431 | | -; CHECK-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 |
432 | | -; CHECK-NEXT: da analyze - confused! |
433 | | -; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4 |
434 | | -; CHECK-NEXT: da analyze - none! |
435 | | -; CHECK-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 |
436 | | -; CHECK-NEXT: da analyze - confused! |
437 | | -; CHECK-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 |
438 | | -; CHECK-NEXT: da analyze - none! |
| 428 | +; CHECK-ALL-LABEL: 'strong9' |
| 429 | +; CHECK-ALL-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4 |
| 430 | +; CHECK-ALL-NEXT: da analyze - none! |
| 431 | +; CHECK-ALL-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4 |
| 432 | +; CHECK-ALL-NEXT: da analyze - none! |
| 433 | +; CHECK-ALL-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 |
| 434 | +; CHECK-ALL-NEXT: da analyze - confused! |
| 435 | +; CHECK-ALL-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4 |
| 436 | +; CHECK-ALL-NEXT: da analyze - none! |
| 437 | +; CHECK-ALL-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 |
| 438 | +; CHECK-ALL-NEXT: da analyze - confused! |
| 439 | +; CHECK-ALL-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 |
| 440 | +; CHECK-ALL-NEXT: da analyze - none! |
| 441 | +; |
| 442 | +; CHECK-STRONG-SIV-LABEL: 'strong9' |
| 443 | +; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %conv, ptr %arrayidx, align 4 |
| 444 | +; CHECK-STRONG-SIV-NEXT: da analyze - none! |
| 445 | +; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4 |
| 446 | +; CHECK-STRONG-SIV-NEXT: da analyze - flow [*|<]! |
| 447 | +; CHECK-STRONG-SIV-NEXT: Src: store i32 %conv, ptr %arrayidx, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 |
| 448 | +; CHECK-STRONG-SIV-NEXT: da analyze - confused! |
| 449 | +; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: %0 = load i32, ptr %arrayidx2, align 4 |
| 450 | +; CHECK-STRONG-SIV-NEXT: da analyze - none! |
| 451 | +; CHECK-STRONG-SIV-NEXT: Src: %0 = load i32, ptr %arrayidx2, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 |
| 452 | +; CHECK-STRONG-SIV-NEXT: da analyze - confused! |
| 453 | +; CHECK-STRONG-SIV-NEXT: Src: store i32 %0, ptr %B.addr.02, align 4 --> Dst: store i32 %0, ptr %B.addr.02, align 4 |
| 454 | +; CHECK-STRONG-SIV-NEXT: da analyze - none! |
439 | 455 | ; |
440 | 456 | entry: |
441 | 457 | %cmp1 = icmp eq i64 %n, 0 |
@@ -512,3 +528,56 @@ for.body: ; preds = %entry, %for.body |
512 | 528 | for.end: ; preds = %for.body |
513 | 529 | ret void |
514 | 530 | } |
| 531 | + |
| 532 | +;; for (long unsigned i = 0; i < 9223372036854775806; i++) { |
| 533 | +;; for (long unsigned j = 0; j < 2147483640; j++) { |
| 534 | +;; if (i < 3000000000) { |
| 535 | +;; A[i] = 0; |
| 536 | +;; A[j] = 0; |
| 537 | +;; } |
| 538 | +;; } |
| 539 | +;; } |
| 540 | + |
| 541 | +define void @strong11(ptr %A) nounwind uwtable ssp { |
| 542 | +; CHECK-ALL-LABEL: 'strong11' |
| 543 | +; CHECK-ALL-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx, align 4 |
| 544 | +; CHECK-ALL-NEXT: da analyze - none! |
| 545 | +; CHECK-ALL-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx6.us, align 4 |
| 546 | +; CHECK-ALL-NEXT: da analyze - none! |
| 547 | +; CHECK-ALL-NEXT: Src: store i32 0, ptr %arrayidx6.us, align 4 --> Dst: store i32 0, ptr %arrayidx6.us, align 4 |
| 548 | +; CHECK-ALL-NEXT: da analyze - consistent output [S 0]! |
| 549 | +; |
| 550 | +; CHECK-STRONG-SIV-LABEL: 'strong11' |
| 551 | +; CHECK-STRONG-SIV-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx, align 4 |
| 552 | +; CHECK-STRONG-SIV-NEXT: da analyze - consistent output [0 S]! |
| 553 | +; CHECK-STRONG-SIV-NEXT: Src: store i32 0, ptr %arrayidx, align 4 --> Dst: store i32 0, ptr %arrayidx6.us, align 4 |
| 554 | +; CHECK-STRONG-SIV-NEXT: da analyze - consistent output [* *|<]! |
| 555 | +; CHECK-STRONG-SIV-NEXT: Src: store i32 0, ptr %arrayidx6.us, align 4 --> Dst: store i32 0, ptr %arrayidx6.us, align 4 |
| 556 | +; CHECK-STRONG-SIV-NEXT: da analyze - consistent output [S 0]! |
| 557 | +; |
| 558 | +entry: |
| 559 | + br label %for.cond1.preheader |
| 560 | + |
| 561 | +for.cond1.preheader: ; preds = %entry, %for.cond.cleanup3 |
| 562 | + %i.017 = phi i64 [ 0, %entry ], [ %inc8, %for.cond.cleanup3 ] |
| 563 | + %cmp5 = icmp samesign ult i64 %i.017, 3000000000 |
| 564 | + %arrayidx = getelementptr inbounds nuw i32, ptr %A, i64 %i.017 |
| 565 | + br i1 %cmp5, label %for.body4.us, label %for.cond.cleanup3 |
| 566 | + |
| 567 | +for.body4.us: ; preds = %for.cond1.preheader, %for.body4.us |
| 568 | + %j.016.us = phi i64 [ %inc.us, %for.body4.us ], [ 0, %for.cond1.preheader ] |
| 569 | + store i32 0, ptr %arrayidx, align 4 |
| 570 | + %arrayidx6.us = getelementptr inbounds nuw i32, ptr %A, i64 %j.016.us |
| 571 | + store i32 0, ptr %arrayidx6.us, align 4 |
| 572 | + %inc.us = add nuw nsw i64 %j.016.us, 1 |
| 573 | + %exitcond.not = icmp eq i64 %inc.us, 2147483640 |
| 574 | + br i1 %exitcond.not, label %for.cond.cleanup3, label %for.body4.us |
| 575 | + |
| 576 | +for.cond.cleanup: ; preds = %for.cond.cleanup3 |
| 577 | + ret void |
| 578 | + |
| 579 | +for.cond.cleanup3: ; preds = %for.body4.us, %for.cond1.preheader |
| 580 | + %inc8 = add nuw nsw i64 %i.017, 1 |
| 581 | + %exitcond19.not = icmp eq i64 %inc8, 9223372036854775806 |
| 582 | + br i1 %exitcond19.not, label %for.cond.cleanup, label %for.cond1.preheader |
| 583 | +} |
0 commit comments