diff options
| author | Nicola Zaghen <nicola.zaghen@imgtec.com> | 2019-12-13 09:55:45 +0000 |
|---|---|---|
| committer | Nicola Zaghen <nicola.zaghen@imgtec.com> | 2019-12-13 14:30:21 +0000 |
| commit | 97572775d2fe088d8059b3a9423f6d8539fafe33 (patch) | |
| tree | 634e93ae8cbc9e4d7691d65a864bc61dfe689026 /llvm/test/Transforms/PhaseOrdering | |
| parent | 56adcebfda84009b2825e69f71068685360abed7 (diff) | |
| download | bcm5719-llvm-97572775d2fe088d8059b3a9423f6d8539fafe33.tar.gz bcm5719-llvm-97572775d2fe088d8059b3a9423f6d8539fafe33.zip | |
Reland [DataLayout] Fix occurrences that size and range of pointers are assumed to be the same.
GEP index size can be specified in the DataLayout, introduced in D42123. However, there were still places
in which getIndexSizeInBits was used interchangeably with getPointerSizeInBits. This notably caused issues
with Instcombine's visitPtrToInt; but the unit tests was incorrect, so this remained undiscovered.
This fixes the buildbot failures.
Differential Revision: https://reviews.llvm.org/D68328
Patch by Joseph Faulls!
Diffstat (limited to 'llvm/test/Transforms/PhaseOrdering')
| -rw-r--r-- | llvm/test/Transforms/PhaseOrdering/scev-custom-dl.ll | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/llvm/test/Transforms/PhaseOrdering/scev-custom-dl.ll b/llvm/test/Transforms/PhaseOrdering/scev-custom-dl.ll index ae822dd2e81..f67b121383c 100644 --- a/llvm/test/Transforms/PhaseOrdering/scev-custom-dl.ll +++ b/llvm/test/Transforms/PhaseOrdering/scev-custom-dl.ll @@ -65,3 +65,73 @@ for.inc: ; preds = %for.body for.end: ; preds = %for.cond ret void } + +@array = weak global [101 x i32] zeroinitializer, align 32 ; <[100 x i32]*> [#uses=1] + +; CHECK: Loop %bb: backedge-taken count is 100 + +define void @test_range_ref1a(i32 %x) { +entry: + br label %bb + +bb: ; preds = %bb, %entry + %i.01.0 = phi i32 [ 100, %entry ], [ %tmp4, %bb ] ; <i32> [#uses=2] + %tmp1 = getelementptr [101 x i32], [101 x i32]* @array, i32 0, i32 %i.01.0 ; <i32*> [#uses=1] + store i32 %x, i32* %tmp1 + %tmp4 = add i32 %i.01.0, -1 ; <i32> [#uses=2] + %tmp7 = icmp sgt i32 %tmp4, -1 ; <i1> [#uses=1] + br i1 %tmp7, label %bb, label %return + +return: ; preds = %bb + ret void +} + +define i32 @test_loop_idiom_recogize(i32 %x, i32 %y, i32* %lam, i32* %alp) nounwind { +bb1.thread: + br label %bb1 + +bb1: ; preds = %bb1, %bb1.thread + %indvar = phi i32 [ 0, %bb1.thread ], [ %indvar.next, %bb1 ] ; <i32> [#uses=4] + %i.0.reg2mem.0 = sub i32 255, %indvar ; <i32> [#uses=2] + %0 = getelementptr i32, i32* %alp, i32 %i.0.reg2mem.0 ; <i32*> [#uses=1] + %1 = load i32, i32* %0, align 4 ; <i32> [#uses=1] + %2 = getelementptr i32, i32* %lam, i32 %i.0.reg2mem.0 ; <i32*> [#uses=1] + store i32 %1, i32* %2, align 4 + %3 = sub i32 254, %indvar ; <i32> [#uses=1] + %4 = icmp slt i32 %3, 0 ; <i1> [#uses=1] + %indvar.next = add i32 %indvar, 1 ; <i32> [#uses=1] + br i1 %4, label %bb2, label %bb1 + +bb2: ; preds = %bb1 + %tmp10 = mul i32 %indvar, %x ; <i32> [#uses=1] + %z.0.reg2mem.0 = add i32 %tmp10, %y ; <i32> [#uses=1] + %5 = add i32 %z.0.reg2mem.0, %x ; <i32> [#uses=1] + ret i32 %5 +} + +declare void @use(i1) + +declare void @llvm.experimental.guard(i1, ...) + +; This tests getRangeRef acts as intended with different idx size. +; CHECK: max backedge-taken count is 318 +define void @test_range_ref1(i8 %t) { + entry: + %t.ptr = inttoptr i8 %t to i8* + %p.42 = inttoptr i8 42 to i8* + %cmp1 = icmp slt i8* %t.ptr, %p.42 + call void(i1, ...) @llvm.experimental.guard(i1 %cmp1) [ "deopt"() ] + br label %loop + + loop: + %idx = phi i8* [ %t.ptr, %entry ], [ %snext, %loop ] + %snext = getelementptr inbounds i8, i8* %idx, i64 1 + %c = icmp slt i8* %idx, %p.42 + call void @use(i1 %c) + %be = icmp slt i8* %snext, %p.42 + br i1 %be, label %loop, label %exit + + exit: + ret void +} + |

