From: Philip Reames Date: Thu, 28 Feb 2019 18:08:04 +0000 (+0000) Subject: [Tests] Strengthen LICM test corpus to show alignment striping X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=360eb902d85fb9fb11786530b51fc7a2835cd308;p=llvm [Tests] Strengthen LICM test corpus to show alignment striping Doing scalar promotion w/o being able to prove the alignment of the hoisted load or sunk store is a bug. Update tests to actually show the alignment so that impact of the patch which fixes this can be seen. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355110 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Transforms/LICM/promote-tls.ll b/test/Transforms/LICM/promote-tls.ll index 076d05cf094..3fe46e81ed9 100644 --- a/test/Transforms/LICM/promote-tls.ll +++ b/test/Transforms/LICM/promote-tls.ll @@ -21,6 +21,8 @@ entry: br label %for.body.lr.ph for.body.lr.ph: ; preds = %entry +; CHECK-LABEL: for.body.lr.ph: +; CHECK-NEXT: %addr.promoted = load i32, i32* %addr, align 1 br label %for.header for.header: @@ -59,6 +61,8 @@ entry: br label %for.body.lr.ph for.body.lr.ph: ; preds = %entry +; CHECK-LABEL: for.body.lr.ph: +; CHECK-NEXT: %addr.promoted = load i32, i32* %addr, align 1 br label %for.header for.header: diff --git a/test/Transforms/LICM/scalar-promote-unwind.ll b/test/Transforms/LICM/scalar-promote-unwind.ll index f1f52eed1d4..bb90a4f821c 100644 --- a/test/Transforms/LICM/scalar-promote-unwind.ll +++ b/test/Transforms/LICM/scalar-promote-unwind.ll @@ -67,6 +67,32 @@ for.cond.cleanup: ret void } +define void @test3(i1 zeroext %y) uwtable { +; CHECK-LABEL: @test3 +entry: +; CHECK-LABEL: entry: +; CHECK-NEXT: %a = alloca i32 +; CHECK-NEXT: %a.promoted = load i32, i32* %a, align 1 + %a = alloca i32 + br label %for.body + +for.body: + %i.03 = phi i32 [ 0, %entry ], [ %inc, %for.body ] + %0 = load i32, i32* %a, align 4 + %add = add nsw i32 %0, 1 + tail call void @f() + store i32 %add, i32* %a, align 4 + %inc = add nuw nsw i32 %i.03, 1 + %exitcond = icmp eq i32 %inc, 10000 + br i1 %exitcond, label %for.cond.cleanup, label %for.body + +for.cond.cleanup: +; CHECK-LABEL: for.cond.cleanup: +; CHECK: store i32 %add.lcssa, i32* %a, align 1 +; CHECK-NEXT: ret void + ret void +} + @_ZTIi = external constant i8* ; In this test, the loop is within a try block. There is an explicit unwind edge out of the loop.