minimize test cases
authorSanjay Patel <spatel@rotateright.com>
Sat, 26 Mar 2016 23:09:25 +0000 (23:09 +0000)
committerSanjay Patel <spatel@rotateright.com>
Sat, 26 Mar 2016 23:09:25 +0000 (23:09 +0000)
These are tests for store transforms.
The loads, adds, and geps were irrelevant.

llvm-svn: 264526

llvm/test/Transforms/SimplifyCFG/speculate-store.ll

index c1ac7bc..15f403c 100644 (file)
 ; 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
 }
+