forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[SystemZ] Add support for TMHH, TMHL, TMLH and TMLL
For now just handles simple comparisons of an ANDed value with zero. The CC value provides enough information to do any comparison for a 2-bit mask, and some nonzero comparisons with more populated masks, but that's all future work. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189469 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Richard Sandiford
committed
Aug 28, 2013
1 parent
a6c3a4e
commit 4771681
Showing
11 changed files
with
490 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
; Test the use of TEST UNDER MASK for 32-bit operations. | ||
; | ||
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 | FileCheck %s | ||
|
||
@g = global i32 0 | ||
|
||
; Check the lowest useful TMLL value. | ||
define void @f1(i32 %a) { | ||
; CHECK-LABEL: f1: | ||
; CHECK: tmll %r2, 1 | ||
; CHECK: je {{\.L.*}} | ||
; CHECK: br %r14 | ||
entry: | ||
%and = and i32 %a, 1 | ||
%cmp = icmp eq i32 %and, 0 | ||
br i1 %cmp, label %exit, label %store | ||
|
||
store: | ||
store i32 1, i32 *@g | ||
br label %exit | ||
|
||
exit: | ||
ret void | ||
} | ||
|
||
; Check the high end of the TMLL range. | ||
define void @f2(i32 %a) { | ||
; CHECK-LABEL: f2: | ||
; CHECK: tmll %r2, 65535 | ||
; CHECK: jne {{\.L.*}} | ||
; CHECK: br %r14 | ||
entry: | ||
%and = and i32 %a, 65535 | ||
%cmp = icmp ne i32 %and, 0 | ||
br i1 %cmp, label %exit, label %store | ||
|
||
store: | ||
store i32 1, i32 *@g | ||
br label %exit | ||
|
||
exit: | ||
ret void | ||
} | ||
|
||
; Check the lowest useful TMLH value, which is the next value up. | ||
define void @f3(i32 %a) { | ||
; CHECK-LABEL: f3: | ||
; CHECK: tmlh %r2, 1 | ||
; CHECK: jne {{\.L.*}} | ||
; CHECK: br %r14 | ||
entry: | ||
%and = and i32 %a, 65536 | ||
%cmp = icmp ne i32 %and, 0 | ||
br i1 %cmp, label %exit, label %store | ||
|
||
store: | ||
store i32 1, i32 *@g | ||
br label %exit | ||
|
||
exit: | ||
ret void | ||
} | ||
|
||
; Check the next value up again, which cannot use TM. | ||
define void @f4(i32 %a) { | ||
; CHECK-LABEL: f4: | ||
; CHECK-NOT: {{tm[lh].}} | ||
; CHECK: br %r14 | ||
entry: | ||
%and = and i32 %a, 4294901759 | ||
%cmp = icmp eq i32 %and, 0 | ||
br i1 %cmp, label %exit, label %store | ||
|
||
store: | ||
store i32 1, i32 *@g | ||
br label %exit | ||
|
||
exit: | ||
ret void | ||
} | ||
|
||
; Check the high end of the TMLH range. | ||
define void @f5(i32 %a) { | ||
; CHECK-LABEL: f5: | ||
; CHECK: tmlh %r2, 65535 | ||
; CHECK: je {{\.L.*}} | ||
; CHECK: br %r14 | ||
entry: | ||
%and = and i32 %a, 4294901760 | ||
%cmp = icmp eq i32 %and, 0 | ||
br i1 %cmp, label %exit, label %store | ||
|
||
store: | ||
store i32 1, i32 *@g | ||
br label %exit | ||
|
||
exit: | ||
ret void | ||
} |
Oops, something went wrong.