From 44c86e5cdc625ff61a467dfe38ac15dfa2913070 Mon Sep 17 00:00:00 2001 From: Florian Hahn Date: Thu, 2 Jun 2022 19:47:43 +0100 Subject: [PATCH] [GVN] Add test for capture tracking use limit. Test for capture-tracking-max-uses-to-explore, adjusted in D126236. --- .../Transforms/GVN/capture-tracking-limit.ll | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 llvm/test/Transforms/GVN/capture-tracking-limit.ll diff --git a/llvm/test/Transforms/GVN/capture-tracking-limit.ll b/llvm/test/Transforms/GVN/capture-tracking-limit.ll new file mode 100644 index 000000000000..12257005395b --- /dev/null +++ b/llvm/test/Transforms/GVN/capture-tracking-limit.ll @@ -0,0 +1,64 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt -aa-pipeline=basic-aa -passes="gvn" -S %s | FileCheck --check-prefixes=CHECK,LIMIT-TOO-SMALL %s +; RUN: opt -aa-pipeline=basic-aa -passes="gvn" -S -capture-tracking-max-uses-to-explore=20 %s | FileCheck --check-prefixes=CHECK,LIMIT-TOO-SMALL %s +; RUN: opt -aa-pipeline=basic-aa -passes="gvn" -S -capture-tracking-max-uses-to-explore=21 %s | FileCheck --check-prefixes=CHECK,LIMIT %s + +define i32 @test1(i32* %p, i1 %C) { +; CHECK-LABEL: @test1( +; CHECK-NEXT: entry: +; CHECK-NEXT: [[A:%.*]] = alloca i32, align 4 +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: call void @dont_capture(i32* [[A]]) +; CHECK-NEXT: store i32 1, i32* [[A]], align 4 +; CHECK-NEXT: call void @may_write() +; LIMIT-TOO-SMALL-NEXT: [[L:%.*]] = load i32, i32* [[A]], align 4 +; LIMIT-TOO-SMALL-NEXT: ret i32 [[L]] +; LIMIT-NEXT: ret i32 1 +; +entry: + %a = alloca i32 + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + call void @dont_capture(i32* %a) + store i32 1, i32* %a + call void @may_write() + %l = load i32, i32* %a + ret i32 %l +} + +declare void @dont_capture(i32* nocapture) + +declare void @may_write()