From 342f7c7e10aec9ba8003b993129f191d438d5545 Mon Sep 17 00:00:00 2001 From: Sanjay Patel Date: Sat, 26 Mar 2016 23:09:25 +0000 Subject: [PATCH] minimize test cases These are tests for store transforms. The loads, adds, and geps were irrelevant. llvm-svn: 264526 --- .../Transforms/SimplifyCFG/speculate-store.ll | 97 ++++++++----------- 1 file changed, 38 insertions(+), 59 deletions(-) diff --git a/llvm/test/Transforms/SimplifyCFG/speculate-store.ll b/llvm/test/Transforms/SimplifyCFG/speculate-store.ll index c1ac7bcea249..15f403ce5f53 100644 --- a/llvm/test/Transforms/SimplifyCFG/speculate-store.ll +++ b/llvm/test/Transforms/SimplifyCFG/speculate-store.ll @@ -1,108 +1,87 @@ ; RUN: opt -simplifycfg -S < %s | FileCheck %s -define void @ifconvertstore(i32 %m, i32* %A, i32* %B, i32 %C, i32 %D) { +define void @ifconvertstore(i32* %A, i32 %B, i32 %C, i32 %D) { +; CHECK-LABEL: @ifconvertstore( +; CHECK: store i32 %B, i32* %A +; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 %D, 42 +; CHECK-NEXT: [[C_B:%.*]] = select i1 [[CMP]], i32 %C, i32 %B +; CHECK-NEXT: store i32 [[C_B]], i32* %A +; CHECK-NEXT: ret void +; entry: - %arrayidx = getelementptr inbounds i32, i32* %B, i64 0 - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %0, %C - %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 0 - ; First store to the location. - store i32 %add, i32* %arrayidx2, align 4 - %arrayidx4 = getelementptr inbounds i32, i32* %B, i64 1 - %1 = load i32, i32* %arrayidx4, align 4 - %add5 = add nsw i32 %1, %D - %cmp6 = icmp sgt i32 %add5, %C - br i1 %cmp6, label %if.then, label %ret.end + store i32 %B, i32* %A + %cmp = icmp sgt i32 %D, 42 + br i1 %cmp, label %if.then, label %ret.end ; Make sure we speculate stores like the following one. It is cheap compared to ; a mispredicated branch. -; CHECK-LABEL: @ifconvertstore( -; CHECK: %add5.add = select i1 %cmp6, i32 %add5, i32 %add -; CHECK: store i32 %add5.add, i32* %arrayidx2, align 4 if.then: - store i32 %add5, i32* %arrayidx2, align 4 + store i32 %C, i32* %A br label %ret.end ret.end: ret void } -define void @noifconvertstore1(i32 %m, i32* %A, i32* %B, i32 %C, i32 %D) { -entry: - %arrayidx = getelementptr inbounds i32, i32* %B, i64 0 - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %0, %C - %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 0 - ; Store to a different location. - store i32 %add, i32* %arrayidx, align 4 - %arrayidx4 = getelementptr inbounds i32, i32* %B, i64 1 - %1 = load i32, i32* %arrayidx4, align 4 - %add5 = add nsw i32 %1, %D - %cmp6 = icmp sgt i32 %add5, %C - br i1 %cmp6, label %if.then, label %ret.end +define void @noifconvertstore1(i32* %A1, i32* %A2, i32 %B, i32 %C, i32 %D) { ; CHECK-LABEL: @noifconvertstore1( ; CHECK-NOT: select +; +entry: + store i32 %B, i32* %A1 + %cmp = icmp sgt i32 %D, 42 + br i1 %cmp, label %if.then, label %ret.end + if.then: - store i32 %add5, i32* %arrayidx2, align 4 + store i32 %C, i32* %A2 br label %ret.end ret.end: ret void } +; This function could store to our address, so we can't repeat the first store a second time. declare void @unknown_fun() -define void @noifconvertstore2(i32 %m, i32* %A, i32* %B, i32 %C, i32 %D) { +define void @noifconvertstore2(i32* %A, i32 %B, i32 %C, i32 %D) { +; CHECK-LABEL: @noifconvertstore2( +; CHECK-NOT: select +; entry: - %arrayidx = getelementptr inbounds i32, i32* %B, i64 0 - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %0, %C - %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 0 - ; First store to the location. - store i32 %add, i32* %arrayidx2, align 4 + store i32 %B, i32* %A call void @unknown_fun() - %arrayidx4 = getelementptr inbounds i32, i32* %B, i64 1 - %1 = load i32, i32* %arrayidx4, align 4 - %add5 = add nsw i32 %1, %D - %cmp6 = icmp sgt i32 %add5, %C + %cmp6 = icmp sgt i32 %D, 42 br i1 %cmp6, label %if.then, label %ret.end -; CHECK-LABEL: @noifconvertstore2( -; CHECK-NOT: select if.then: - store i32 %add5, i32* %arrayidx2, align 4 + store i32 %C, i32* %A br label %ret.end ret.end: ret void } -define void @noifconvertstore_volatile(i32 %m, i32* %A, i32* %B, i32 %C, i32 %D) { -entry: - %arrayidx = getelementptr inbounds i32, i32* %B, i64 0 - %0 = load i32, i32* %arrayidx, align 4 - %add = add nsw i32 %0, %C - %arrayidx2 = getelementptr inbounds i32, i32* %A, i64 0 +; Make sure we don't speculate volatile stores. +define void @noifconvertstore_volatile(i32* %A, i32 %B, i32 %C, i32 %D) { +; CHECK-LABEL: @noifconvertstore_volatile( +; CHECK-NOT: select +; +entry: ; First store to the location. - store i32 %add, i32* %arrayidx2, align 4 - %arrayidx4 = getelementptr inbounds i32, i32* %B, i64 1 - %1 = load i32, i32* %arrayidx4, align 4 - %add5 = add nsw i32 %1, %D - %cmp6 = icmp sgt i32 %add5, %C + store i32 %B, i32* %A + %cmp6 = icmp sgt i32 %D, 42 br i1 %cmp6, label %if.then, label %ret.end -; Make sure we don't speculate volatile stores. -; CHECK-LABEL: @noifconvertstore_volatile( -; CHECK-NOT: select if.then: - store volatile i32 %add5, i32* %arrayidx2, align 4 + store volatile i32 %C, i32* %A br label %ret.end ret.end: ret void } + -- GitLab