From f561713d7513110b6e791959734cca9e0bf7fe33 Mon Sep 17 00:00:00 2001 From: Juneyoung Lee Date: Fri, 31 Jul 2020 15:20:38 +0900 Subject: [PATCH] [JumpThreading] Add a test for D84944 ; NFC --- llvm/test/Transforms/JumpThreading/pre-load.ll | 84 ++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 llvm/test/Transforms/JumpThreading/pre-load.ll diff --git a/llvm/test/Transforms/JumpThreading/pre-load.ll b/llvm/test/Transforms/JumpThreading/pre-load.ll new file mode 100644 index 0000000..0a8af98 --- /dev/null +++ b/llvm/test/Transforms/JumpThreading/pre-load.ll @@ -0,0 +1,84 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt -jump-threading -S < %s | FileCheck %s + +@x = global i32 0 +@y = global i32 0 + +declare void @f() +declare void @g() + +define i32 @pre(i1 %cond, i32 %n) { +; CHECK-LABEL: @pre( +; CHECK-NEXT: br i1 [[COND:%.*]], label [[C_THREAD:%.*]], label [[C:%.*]] +; CHECK: C.thread: +; CHECK-NEXT: store i32 0, i32* @x, align 4 +; CHECK-NEXT: br label [[YES:%.*]] +; CHECK: C: +; CHECK-NEXT: [[A_PR:%.*]] = load i32, i32* @y, align 4 +; CHECK-NEXT: [[COND2:%.*]] = icmp eq i32 [[A_PR]], 0 +; CHECK-NEXT: br i1 [[COND2]], label [[YES]], label [[NO:%.*]] +; CHECK: YES: +; CHECK-NEXT: [[A4:%.*]] = phi i32 [ 0, [[C_THREAD]] ], [ [[A_PR]], [[C]] ] +; CHECK-NEXT: call void @f() +; CHECK-NEXT: ret i32 [[A4]] +; CHECK: NO: +; CHECK-NEXT: call void @g() +; CHECK-NEXT: ret i32 1 +; + br i1 %cond, label %A, label %B +A: + store i32 0, i32* @x + br label %C +B: + br label %C +C: + %ptr = phi i32* [@x, %A], [@y, %B] + %a = load i32, i32* %ptr + %cond2 = icmp eq i32 %a, 0 + br i1 %cond2, label %YES, label %NO +YES: + call void @f() + ret i32 %a +NO: + call void @g() + ret i32 1 +} + +define i32 @pre_freeze(i1 %cond, i32 %n) { +; CHECK-LABEL: @pre_freeze( +; CHECK-NEXT: br i1 [[COND:%.*]], label [[A:%.*]], label [[C:%.*]] +; CHECK: A: +; CHECK-NEXT: store i32 0, i32* @x, align 4 +; CHECK-NEXT: br label [[C]] +; CHECK: C: +; CHECK-NEXT: [[PTR:%.*]] = phi i32* [ @x, [[A]] ], [ @y, [[TMP0:%.*]] ] +; CHECK-NEXT: [[A:%.*]] = load i32, i32* [[PTR]], align 4 +; CHECK-NEXT: [[COND2:%.*]] = icmp eq i32 [[A]], 0 +; CHECK-NEXT: [[COND2_FR:%.*]] = freeze i1 [[COND2]] +; CHECK-NEXT: br i1 [[COND2_FR]], label [[YES:%.*]], label [[NO:%.*]] +; CHECK: YES: +; CHECK-NEXT: call void @f() +; CHECK-NEXT: ret i32 [[A]] +; CHECK: NO: +; CHECK-NEXT: call void @g() +; CHECK-NEXT: ret i32 1 +; + br i1 %cond, label %A, label %B +A: + store i32 0, i32* @x + br label %C +B: + br label %C +C: + %ptr = phi i32* [@x, %A], [@y, %B] + %a = load i32, i32* %ptr + %cond2 = icmp eq i32 %a, 0 + %cond2.fr = freeze i1 %cond2 + br i1 %cond2.fr, label %YES, label %NO +YES: + call void @f() + ret i32 %a +NO: + call void @g() + ret i32 1 +} -- 2.7.4