Skip to content
Snippets Groups Projects
Commit 342f7c7e authored by Sanjay Patel's avatar Sanjay Patel
Browse files

minimize test cases

These are tests for store transforms. 
The loads, adds, and geps were irrelevant.

llvm-svn: 264526
parent b8b04f85
No related branches found
No related tags found
No related merge requests found
; 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
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment