From 1ea84653378132091b5b6d31d4f6bf3ec7da7b56 Mon Sep 17 00:00:00 2001 From: Juneyoung Lee Date: Tue, 4 Aug 2020 17:07:28 +0900 Subject: [PATCH] [JumpThreading] Merge/rename thread-two-bbsN.ll tests; NFC --- .../{thread-two-bbs5.ll => thread-two-bbs-cuda.ll} | 0 .../{thread-two-bbs3.ll => thread-two-bbs-msvc.ll} | 0 .../Transforms/JumpThreading/thread-two-bbs.ll | 184 +++++++++++++++++++++ .../Transforms/JumpThreading/thread-two-bbs1.ll | 59 ------- .../Transforms/JumpThreading/thread-two-bbs2.ll | 56 ------- .../Transforms/JumpThreading/thread-two-bbs4.ll | 43 ----- .../Transforms/JumpThreading/thread-two-bbs6.ll | 42 ----- 7 files changed, 184 insertions(+), 200 deletions(-) rename llvm/test/Transforms/JumpThreading/{thread-two-bbs5.ll => thread-two-bbs-cuda.ll} (100%) rename llvm/test/Transforms/JumpThreading/{thread-two-bbs3.ll => thread-two-bbs-msvc.ll} (100%) create mode 100644 llvm/test/Transforms/JumpThreading/thread-two-bbs.ll delete mode 100644 llvm/test/Transforms/JumpThreading/thread-two-bbs1.ll delete mode 100644 llvm/test/Transforms/JumpThreading/thread-two-bbs2.ll delete mode 100644 llvm/test/Transforms/JumpThreading/thread-two-bbs4.ll delete mode 100644 llvm/test/Transforms/JumpThreading/thread-two-bbs6.ll diff --git a/llvm/test/Transforms/JumpThreading/thread-two-bbs5.ll b/llvm/test/Transforms/JumpThreading/thread-two-bbs-cuda.ll similarity index 100% rename from llvm/test/Transforms/JumpThreading/thread-two-bbs5.ll rename to llvm/test/Transforms/JumpThreading/thread-two-bbs-cuda.ll diff --git a/llvm/test/Transforms/JumpThreading/thread-two-bbs3.ll b/llvm/test/Transforms/JumpThreading/thread-two-bbs-msvc.ll similarity index 100% rename from llvm/test/Transforms/JumpThreading/thread-two-bbs3.ll rename to llvm/test/Transforms/JumpThreading/thread-two-bbs-msvc.ll diff --git a/llvm/test/Transforms/JumpThreading/thread-two-bbs.ll b/llvm/test/Transforms/JumpThreading/thread-two-bbs.ll new file mode 100644 index 0000000..94832b6 --- /dev/null +++ b/llvm/test/Transforms/JumpThreading/thread-two-bbs.ll @@ -0,0 +1,184 @@ +; RUN: opt < %s -jump-threading -S -verify | FileCheck %s + +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +@a = global i32 0, align 4 + +define void @foo(i32 %cond1, i32 %cond2) { +; CHECK-LABEL: @foo +; CHECK-LABEL: entry +entry: + %tobool = icmp eq i32 %cond1, 0 + br i1 %tobool, label %bb.cond2, label %bb.f1 + +bb.f1: + call void @f1() + br label %bb.cond2 +; Verify that we branch on cond2 without checking ptr. +; CHECK: call void @f1() +; CHECK-NEXT: icmp eq i32 %cond2, 0 +; CHECK-NEXT: label %bb.f4, label %bb.f2 + +bb.cond2: + %ptr = phi i32* [ null, %bb.f1 ], [ @a, %entry ] + %tobool1 = icmp eq i32 %cond2, 0 + br i1 %tobool1, label %bb.file, label %bb.f2 +; Verify that we branch on cond2 without checking ptr. +; CHECK: icmp eq i32 %cond2, 0 +; CHECK-NEXT: label %bb.f3, label %bb.f2 + +bb.f2: + call void @f2() + br label %exit + +; Verify that we eliminate this basic block. +; CHECK-NOT: bb.file: +bb.file: + %cmp = icmp eq i32* %ptr, null + br i1 %cmp, label %bb.f4, label %bb.f3 + +bb.f3: + call void @f3() + br label %exit + +bb.f4: + call void @f4() + br label %exit + +exit: + ret void +} + +declare void @f1() + +declare void @f2() + +declare void @f3() + +declare void @f4() + + +define void @foo2(i32 %cond1, i32 %cond2) { +; CHECK-LABEL: @foo2 +; CHECK-LABEL: entry +entry: + %tobool = icmp ne i32 %cond1, 0 + br i1 %tobool, label %bb.f1, label %bb.f2 + +bb.f1: + call void @f1() + br label %bb.cond2 +; Verify that we branch on cond2 without checking tobool again. +; CHECK: call void @f1() +; CHECK-NEXT: icmp eq i32 %cond2, 0 +; CHECK-NEXT: label %exit, label %bb.f3 + +bb.f2: + call void @f2() + br label %bb.cond2 +; Verify that we branch on cond2 without checking tobool again. +; CHECK: call void @f2() +; CHECK-NEXT: icmp eq i32 %cond2, 0 +; CHECK-NEXT: label %exit, label %bb.f4 + +bb.cond2: + %tobool1 = icmp eq i32 %cond2, 0 + br i1 %tobool1, label %exit, label %bb.cond1again + +; Verify that we eliminate this basic block. +; CHECK-NOT: bb.cond1again: +bb.cond1again: + br i1 %tobool, label %bb.f3, label %bb.f4 + +bb.f3: + call void @f3() + br label %exit + +bb.f4: + call void @f4() + br label %exit + +exit: + ret void +} + + +; Verify that we do *not* thread any edge. We used to evaluate +; constant expressions like: +; +; icmp ugt i8* null, inttoptr (i64 4 to i8*) +; +; as "true", causing jump threading to a wrong destination. +define void @foo3(i8* %arg1, i8* %arg2) { +; CHECK-LABEL: @foo +; CHECK-NOT: bb_{{[^ ]*}}.thread: +entry: + %cmp1 = icmp eq i8* %arg1, null + br i1 %cmp1, label %bb_bar1, label %bb_end + +bb_bar1: + call void @bar(i32 1) + br label %bb_end + +bb_end: + %cmp2 = icmp ne i8* %arg2, null + br i1 %cmp2, label %bb_cont, label %bb_bar2 + +bb_bar2: + call void @bar(i32 2) + br label %bb_exit + +bb_cont: + %cmp3 = icmp ule i8* %arg1, inttoptr (i64 4 to i8*) + br i1 %cmp3, label %bb_exit, label %bb_bar3 + +bb_bar3: + call void @bar(i32 3) + br label %bb_exit + +bb_exit: + ret void +} + +declare void @bar(i32) + + +;; Test that we skip unconditional PredBB when threading jumps through two +;; successive basic blocks. + +define i32 @foo4(i32* %0) { +; CHECK-LABEL: @f +; CHECK: br i1 %good, label %pred.bb, label %pred.pred.bb +entry: + %size = call i64 @get_size(i32* %0) + %good = icmp ugt i64 %size, 3 + br i1 %good, label %pred.bb, label %pred.pred.bb + +; CHECK: pred.pred.bb: +; CHECK: br label %pred.bb +; CHECK: pred.bb: +; CHECK: br label %bb +; CHECK: bb: +pred.pred.bb: ; preds = %entry + call void @effect() + br label %pred.bb +pred.bb: ; preds = %pred.pred.bb, %entry + %v = load i32, i32* %0 + br label %bb + +bb: ; preds = %pred.bb + call void @effect1(i8* blockaddress(@foo4, %bb)) + br i1 %good, label %cont2, label %cont1 + +cont1: ; preds = %bb + br i1 %good, label %exit, label %cont2 +cont2: ; preds = %bb + br label %exit +exit: ; preds = %cont1, %cont2 + ret i32 %v +} + +declare i64 @get_size(i32*) +declare void @effect() +declare void @effect1(i8*) diff --git a/llvm/test/Transforms/JumpThreading/thread-two-bbs1.ll b/llvm/test/Transforms/JumpThreading/thread-two-bbs1.ll deleted file mode 100644 index 1b5f5cb..0000000 --- a/llvm/test/Transforms/JumpThreading/thread-two-bbs1.ll +++ /dev/null @@ -1,59 +0,0 @@ -; RUN: opt < %s -jump-threading -S -verify | FileCheck %s - -target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -@a = global i32 0, align 4 - -define void @foo(i32 %cond1, i32 %cond2) { -; CHECK-LABEL: @foo -; CHECK-LABEL: entry -entry: - %tobool = icmp eq i32 %cond1, 0 - br i1 %tobool, label %bb.cond2, label %bb.f1 - -bb.f1: - call void @f1() - br label %bb.cond2 -; Verify that we branch on cond2 without checking ptr. -; CHECK: call void @f1() -; CHECK-NEXT: icmp eq i32 %cond2, 0 -; CHECK-NEXT: label %bb.f4, label %bb.f2 - -bb.cond2: - %ptr = phi i32* [ null, %bb.f1 ], [ @a, %entry ] - %tobool1 = icmp eq i32 %cond2, 0 - br i1 %tobool1, label %bb.file, label %bb.f2 -; Verify that we branch on cond2 without checking ptr. -; CHECK: icmp eq i32 %cond2, 0 -; CHECK-NEXT: label %bb.f3, label %bb.f2 - -bb.f2: - call void @f2() - br label %exit - -; Verify that we eliminate this basic block. -; CHECK-NOT: bb.file: -bb.file: - %cmp = icmp eq i32* %ptr, null - br i1 %cmp, label %bb.f4, label %bb.f3 - -bb.f3: - call void @f3() - br label %exit - -bb.f4: - call void @f4() - br label %exit - -exit: - ret void -} - -declare void @f1() - -declare void @f2() - -declare void @f3() - -declare void @f4() diff --git a/llvm/test/Transforms/JumpThreading/thread-two-bbs2.ll b/llvm/test/Transforms/JumpThreading/thread-two-bbs2.ll deleted file mode 100644 index ebb7ce0..0000000 --- a/llvm/test/Transforms/JumpThreading/thread-two-bbs2.ll +++ /dev/null @@ -1,56 +0,0 @@ -; RUN: opt < %s -jump-threading -S -verify | FileCheck %s - -target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -define void @foo(i32 %cond1, i32 %cond2) { -; CHECK-LABEL: @foo -; CHECK-LABEL: entry -entry: - %tobool = icmp ne i32 %cond1, 0 - br i1 %tobool, label %bb.f1, label %bb.f2 - -bb.f1: - call void @f1() - br label %bb.cond2 -; Verify that we branch on cond2 without checking tobool again. -; CHECK: call void @f1() -; CHECK-NEXT: icmp eq i32 %cond2, 0 -; CHECK-NEXT: label %exit, label %bb.f3 - -bb.f2: - call void @f2() - br label %bb.cond2 -; Verify that we branch on cond2 without checking tobool again. -; CHECK: call void @f2() -; CHECK-NEXT: icmp eq i32 %cond2, 0 -; CHECK-NEXT: label %exit, label %bb.f4 - -bb.cond2: - %tobool1 = icmp eq i32 %cond2, 0 - br i1 %tobool1, label %exit, label %bb.cond1again - -; Verify that we eliminate this basic block. -; CHECK-NOT: bb.cond1again: -bb.cond1again: - br i1 %tobool, label %bb.f3, label %bb.f4 - -bb.f3: - call void @f3() - br label %exit - -bb.f4: - call void @f4() - br label %exit - -exit: - ret void -} - -declare void @f1() local_unnamed_addr - -declare void @f2() local_unnamed_addr - -declare void @f3() local_unnamed_addr - -declare void @f4() local_unnamed_addr diff --git a/llvm/test/Transforms/JumpThreading/thread-two-bbs4.ll b/llvm/test/Transforms/JumpThreading/thread-two-bbs4.ll deleted file mode 100644 index 6ab757f..0000000 --- a/llvm/test/Transforms/JumpThreading/thread-two-bbs4.ll +++ /dev/null @@ -1,43 +0,0 @@ -; RUN: opt < %s -jump-threading -S -verify | FileCheck %s - -target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -; Verify that we do *not* thread any edge. We used to evaluate -; constant expressions like: -; -; icmp ugt i8* null, inttoptr (i64 4 to i8*) -; -; as "true", causing jump threading to a wrong destination. -define void @foo(i8* %arg1, i8* %arg2) { -; CHECK-LABEL: @foo -; CHECK-NOT: bb_{{[^ ]*}}.thread: -entry: - %cmp1 = icmp eq i8* %arg1, null - br i1 %cmp1, label %bb_bar1, label %bb_end - -bb_bar1: - call void @bar(i32 1) - br label %bb_end - -bb_end: - %cmp2 = icmp ne i8* %arg2, null - br i1 %cmp2, label %bb_cont, label %bb_bar2 - -bb_bar2: - call void @bar(i32 2) - br label %bb_exit - -bb_cont: - %cmp3 = icmp ule i8* %arg1, inttoptr (i64 4 to i8*) - br i1 %cmp3, label %bb_exit, label %bb_bar3 - -bb_bar3: - call void @bar(i32 3) - br label %bb_exit - -bb_exit: - ret void -} - -declare void @bar(i32) diff --git a/llvm/test/Transforms/JumpThreading/thread-two-bbs6.ll b/llvm/test/Transforms/JumpThreading/thread-two-bbs6.ll deleted file mode 100644 index 0d8d2f0..0000000 --- a/llvm/test/Transforms/JumpThreading/thread-two-bbs6.ll +++ /dev/null @@ -1,42 +0,0 @@ -;; Test that we skip unconditional PredBB when threading jumps through two -;; successive basic blocks. -; RUN: opt -S -passes='function(jump-threading)' < %s | FileCheck %s - -target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" -target triple = "x86_64-unknown-linux-gnu" - -define i32 @f(i32* %0) { -; CHECK-LABEL: @f -; CHECK: br i1 %good, label %pred.bb, label %pred.pred.bb -entry: - %size = call i64 @get_size(i32* %0) - %good = icmp ugt i64 %size, 3 - br i1 %good, label %pred.bb, label %pred.pred.bb - -; CHECK: pred.pred.bb: -; CHECK: br label %pred.bb -; CHECK: pred.bb: -; CHECK: br label %bb -; CHECK: bb: -pred.pred.bb: ; preds = %entry - call void @effect() - br label %pred.bb -pred.bb: ; preds = %pred.pred.bb, %entry - %v = load i32, i32* %0 - br label %bb - -bb: ; preds = %pred.bb - call void @effect1(i8* blockaddress(@f, %bb)) - br i1 %good, label %cont2, label %cont1 - -cont1: ; preds = %bb - br i1 %good, label %exit, label %cont2 -cont2: ; preds = %bb - br label %exit -exit: ; preds = %cont1, %cont2 - ret i32 %v -} - -declare i64 @get_size(i32*) -declare void @effect() -declare void @effect1(i8*) -- 2.7.4