summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/SystemZ
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/SystemZ')
-rw-r--r--llvm/test/CodeGen/SystemZ/int-cmp-44.ll59
-rw-r--r--llvm/test/CodeGen/SystemZ/int-cmp-45.ll27
-rw-r--r--llvm/test/CodeGen/SystemZ/int-cmp-56.ll163
-rw-r--r--llvm/test/CodeGen/SystemZ/int-cmp-57.ll103
-rw-r--r--llvm/test/CodeGen/SystemZ/int-cmp-58.mir71
5 files changed, 379 insertions, 44 deletions
diff --git a/llvm/test/CodeGen/SystemZ/int-cmp-44.ll b/llvm/test/CodeGen/SystemZ/int-cmp-44.ll
index 45bb32b9ce6..2321b7d16a2 100644
--- a/llvm/test/CodeGen/SystemZ/int-cmp-44.ll
+++ b/llvm/test/CodeGen/SystemZ/int-cmp-44.ll
@@ -6,15 +6,16 @@
declare void @foo()
-; Addition provides enough for equality comparisons with zero. First teest
-; the EQ case.
+; Addition provides enough for comparisons with zero if we know no
+; signed overflow happens, which is when the "nsw" flag is set.
+; First test the EQ case.
define i32 @f1(i32 %a, i32 %b, i32 *%dest) {
; CHECK-LABEL: f1:
; CHECK: afi %r2, 1000000
; CHECK-NEXT: ber %r14
; CHECK: br %r14
entry:
- %res = add i32 %a, 1000000
+ %res = add nsw i32 %a, 1000000
%cmp = icmp eq i32 %res, 0
br i1 %cmp, label %exit, label %store
@@ -30,10 +31,10 @@ exit:
define i32 @f2(i32 %a, i32 %b, i32 *%dest) {
; CHECK-LABEL: f2:
; CHECK: afi %r2, 1000000
-; CHECK-NEXT: bner %r14
+; CHECK-NEXT: blhr %r14
; CHECK: br %r14
entry:
- %res = add i32 %a, 1000000
+ %res = add nsw i32 %a, 1000000
%cmp = icmp ne i32 %res, 0
br i1 %cmp, label %exit, label %store
@@ -45,14 +46,13 @@ exit:
ret i32 %res
}
-; SLT requires a comparison.
+; ...and again with SLT.
define i32 @f3(i32 %a, i32 %b, i32 *%dest) {
; CHECK-LABEL: f3:
; CHECK: afi %r2, 1000000
-; CHECK-NEXT: cibl %r2, 0, 0(%r14)
-; CHECK: br %r14
+; CHECK-NEXT: blr %r14
entry:
- %res = add i32 %a, 1000000
+ %res = add nsw i32 %a, 1000000
%cmp = icmp slt i32 %res, 0
br i1 %cmp, label %exit, label %store
@@ -64,14 +64,13 @@ exit:
ret i32 %res
}
-; ...SLE too.
+; ...and again with SLE.
define i32 @f4(i32 %a, i32 %b, i32 *%dest) {
; CHECK-LABEL: f4:
; CHECK: afi %r2, 1000000
-; CHECK-NEXT: cible %r2, 0, 0(%r14)
-; CHECK: br %r14
+; CHECK-NEXT: bler %r14
entry:
- %res = add i32 %a, 1000000
+ %res = add nsw i32 %a, 1000000
%cmp = icmp sle i32 %res, 0
br i1 %cmp, label %exit, label %store
@@ -83,14 +82,13 @@ exit:
ret i32 %res
}
-; ...SGT too.
+; ...and again with SGT.
define i32 @f5(i32 %a, i32 %b, i32 *%dest) {
; CHECK-LABEL: f5:
; CHECK: afi %r2, 1000000
-; CHECK-NEXT: cibh %r2, 0, 0(%r14)
-; CHECK: br %r14
+; CHECK-NEXT: bhr %r14
entry:
- %res = add i32 %a, 1000000
+ %res = add nsw i32 %a, 1000000
%cmp = icmp sgt i32 %res, 0
br i1 %cmp, label %exit, label %store
@@ -102,14 +100,13 @@ exit:
ret i32 %res
}
-; ...SGE too.
+; ...and again with SGE.
define i32 @f6(i32 %a, i32 %b, i32 *%dest) {
; CHECK-LABEL: f6:
; CHECK: afi %r2, 1000000
-; CHECK-NEXT: cibhe %r2, 0, 0(%r14)
-; CHECK: br %r14
+; CHECK-NEXT: bher %r14
entry:
- %res = add i32 %a, 1000000
+ %res = add nsw i32 %a, 1000000
%cmp = icmp sge i32 %res, 0
br i1 %cmp, label %exit, label %store
@@ -121,7 +118,8 @@ exit:
ret i32 %res
}
-; Subtraction also provides enough for equality comparisons with zero.
+; Subtraction provides in addition also enough for equality comparisons with
+; zero even without "nsw".
define i32 @f7(i32 %a, i32 %b, i32 *%dest) {
; CHECK-LABEL: f7:
; CHECK: s %r2, 0(%r4)
@@ -141,15 +139,14 @@ exit:
ret i32 %res
}
-; ...but not for ordered comparisons.
+; ...and again with SLT.
define i32 @f8(i32 %a, i32 %b, i32 *%dest) {
; CHECK-LABEL: f8:
; CHECK: s %r2, 0(%r4)
-; CHECK-NEXT: cibl %r2, 0, 0(%r14)
-; CHECK: br %r14
+; CHECK-NEXT: blr %r14
entry:
%cur = load i32, i32 *%dest
- %res = sub i32 %a, %cur
+ %res = sub nsw i32 %a, %cur
%cmp = icmp slt i32 %res, 0
br i1 %cmp, label %exit, label %store
@@ -445,10 +442,10 @@ define i32 @f23(i32 %a, i32 %b, i32 *%dest1, i32 *%dest2) {
; CHECK-LABEL: f23:
; CHECK: afi %r2, 1000000
; CHECK-NEXT: st %r2, 0(%r4)
-; CHECK-NEXT: bner %r14
+; CHECK-NEXT: blhr %r14
; CHECK: br %r14
entry:
- %res = add i32 %a, 1000000
+ %res = add nsw i32 %a, 1000000
store i32 %res, i32 *%dest1
%cmp = icmp ne i32 %res, 0
br i1 %cmp, label %exit, label %store
@@ -491,10 +488,10 @@ define void @f25(i32 %a, i32 *%ptr) {
; CHECK-NEXT: #APP
; CHECK-NEXT: blah
; CHECK-NEXT: #NO_APP
-; CHECK-NEXT: bner %r14
+; CHECK-NEXT: blhr %r14
; CHECK: br %r14
entry:
- %add = add i32 %a, 1000000
+ %add = add nsw i32 %a, 1000000
call void asm sideeffect "blah", "r"(i32 %add)
%cmp = icmp ne i32 %add, 0
br i1 %cmp, label %exit, label %store
@@ -540,7 +537,7 @@ define i32 @f27(i32 %a, i32 %b, i32 *%dest1, i32 *%dest2) {
; CHECK-NEXT: cibe %r2, 0, 0(%r14)
; CHECK: br %r14
entry:
- %add = add i32 %a, 1000000
+ %add = add nsw i32 %a, 1000000
%sub = sub i32 %b, %add
store i32 %sub, i32 *%dest1
%cmp = icmp eq i32 %add, 0
diff --git a/llvm/test/CodeGen/SystemZ/int-cmp-45.ll b/llvm/test/CodeGen/SystemZ/int-cmp-45.ll
index e07d37e571b..296cf449742 100644
--- a/llvm/test/CodeGen/SystemZ/int-cmp-45.ll
+++ b/llvm/test/CodeGen/SystemZ/int-cmp-45.ll
@@ -3,14 +3,15 @@
;
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 -no-integrated-as | FileCheck %s
-; Addition provides enough for equality comparisons with zero. First teest
-; the EQ case with LOC.
+; Addition provides enough for comparisons with zero if we know no
+; signed overflow happens, which is when the "nsw" flag is set.
+; First test the EQ case with LOC.
define i32 @f1(i32 %a, i32 %b, i32 *%cptr) {
; CHECK-LABEL: f1:
; CHECK: afi %r2, 1000000
; CHECK-NEXT: loce %r3, 0(%r4)
; CHECK: br %r14
- %add = add i32 %a, 1000000
+ %add = add nsw i32 %a, 1000000
%cmp = icmp eq i32 %add, 0
%c = load i32, i32 *%cptr
%arg = select i1 %cmp, i32 %c, i32 %b
@@ -24,7 +25,7 @@ define i32 @f2(i32 %a, i32 %b, i32 *%cptr) {
; CHECK: afi %r2, 1000000
; CHECK-NEXT: stoce %r3, 0(%r4)
; CHECK: br %r14
- %add = add i32 %a, 1000000
+ %add = add nsw i32 %a, 1000000
%cmp = icmp eq i32 %add, 0
%c = load i32, i32 *%cptr
%newval = select i1 %cmp, i32 %b, i32 %c
@@ -36,9 +37,9 @@ define i32 @f2(i32 %a, i32 %b, i32 *%cptr) {
define i32 @f3(i32 %a, i32 %b, i32 %c) {
; CHECK-LABEL: f3:
; CHECK: afi %r2, 1000000
-; CHECK-NEXT: locrne %r3, %r4
+; CHECK-NEXT: locrlh %r3, %r4
; CHECK: br %r14
- %add = add i32 %a, 1000000
+ %add = add nsw i32 %a, 1000000
%cmp = icmp eq i32 %add, 0
%arg = select i1 %cmp, i32 %b, i32 %c
call void asm sideeffect "blah $0", "{r3}"(i32 %arg)
@@ -49,9 +50,9 @@ define i32 @f3(i32 %a, i32 %b, i32 %c) {
define i32 @f4(i32 %a, i32 %b, i32 *%cptr) {
; CHECK-LABEL: f4:
; CHECK: afi %r2, 1000000
-; CHECK-NEXT: locne %r3, 0(%r4)
+; CHECK-NEXT: loclh %r3, 0(%r4)
; CHECK: br %r14
- %add = add i32 %a, 1000000
+ %add = add nsw i32 %a, 1000000
%cmp = icmp eq i32 %add, 0
%c = load i32, i32 *%cptr
%arg = select i1 %cmp, i32 %b, i32 %c
@@ -63,9 +64,9 @@ define i32 @f4(i32 %a, i32 %b, i32 *%cptr) {
define i32 @f5(i32 %a, i32 %b, i32 *%cptr) {
; CHECK-LABEL: f5:
; CHECK: afi %r2, 1000000
-; CHECK-NEXT: stocne %r3, 0(%r4)
+; CHECK-NEXT: stoclh %r3, 0(%r4)
; CHECK: br %r14
- %add = add i32 %a, 1000000
+ %add = add nsw i32 %a, 1000000
%cmp = icmp eq i32 %add, 0
%c = load i32, i32 *%cptr
%newval = select i1 %cmp, i32 %c, i32 %b
@@ -79,7 +80,7 @@ define i32 @f6(i32 %a, i32 %b, i32 %c) {
; CHECK: afi %r2, 1000000
; CHECK-NEXT: locre %r3, %r4
; CHECK: br %r14
- %add = add i32 %a, 1000000
+ %add = add nsw i32 %a, 1000000
%cmp = icmp ne i32 %add, 0
%arg = select i1 %cmp, i32 %b, i32 %c
call void asm sideeffect "blah $0", "{r3}"(i32 %arg)
@@ -92,7 +93,7 @@ define i32 @f7(i32 %a, i32 %b, i32 *%cptr) {
; CHECK: afi %r2, 1000000
; CHECK-NEXT: loce %r3, 0(%r4)
; CHECK: br %r14
- %add = add i32 %a, 1000000
+ %add = add nsw i32 %a, 1000000
%cmp = icmp ne i32 %add, 0
%c = load i32, i32 *%cptr
%arg = select i1 %cmp, i32 %b, i32 %c
@@ -106,7 +107,7 @@ define i32 @f8(i32 %a, i32 %b, i32 *%cptr) {
; CHECK: afi %r2, 1000000
; CHECK-NEXT: stoce %r3, 0(%r4)
; CHECK: br %r14
- %add = add i32 %a, 1000000
+ %add = add nsw i32 %a, 1000000
%cmp = icmp ne i32 %add, 0
%c = load i32, i32 *%cptr
%newval = select i1 %cmp, i32 %c, i32 %b
diff --git a/llvm/test/CodeGen/SystemZ/int-cmp-56.ll b/llvm/test/CodeGen/SystemZ/int-cmp-56.ll
new file mode 100644
index 00000000000..5b55e4a819d
--- /dev/null
+++ b/llvm/test/CodeGen/SystemZ/int-cmp-56.ll
@@ -0,0 +1,163 @@
+; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 | FileCheck %s
+;
+; Check that signed comparisons against 0 are only eliminated if the "nsw"
+; flag is present on the defining add (with register) instruction. For an
+; equality comparison, add logical can be used.
+
+define i32 @fun0(i32 %arg, i32 %arg2, i32 %arg3) {
+; CHECK-LABEL: fun0:
+; CHECK: jle .LBB0_2{{$}}
+; CHECK: je .LBB0_4{{$}}
+
+bb:
+ %tmp2 = add nsw i32 %arg, %arg2
+ %tmp3 = icmp sgt i32 %tmp2, 0
+ br i1 %tmp3, label %bb3, label %bb1
+
+bb1:
+ %tmp4 = add nsw i32 %arg, %arg3
+ %tmp5 = icmp eq i32 %tmp4, 0
+ br i1 %tmp5, label %bb4, label %bb2
+
+bb2:
+ ret i32 0
+
+bb3:
+ ret i32 1
+
+bb4:
+ ret i32 2
+}
+
+; No "nsw" flag
+define i32 @fun1(i32 %arg, i32 %arg2, i32 %arg3) {
+; CHECK-LABEL: fun1:
+; CHECK: cijle
+; CHECK: alr
+; CHECK: jhe
+
+bb:
+ %tmp2 = add i32 %arg, %arg2
+ %tmp3 = icmp sgt i32 %tmp2, 0
+ br i1 %tmp3, label %bb3, label %bb1
+
+bb1:
+ %tmp4 = add i32 %arg, %arg3
+ %tmp5 = icmp eq i32 %tmp4, 0
+ br i1 %tmp5, label %bb4, label %bb2
+
+bb2:
+ ret i32 0
+
+bb3:
+ ret i32 1
+
+bb4:
+ ret i32 2
+}
+
+; "nuw" flag
+define i32 @fun2(i32 %arg, i32 %arg2, i32 %arg3) {
+; CHECK-LABEL: fun2:
+; CHECK: cijle
+; CHECK: alr
+; CHECK: jhe
+
+bb:
+ %tmp2 = add nuw i32 %arg, %arg2
+ %tmp3 = icmp sgt i32 %tmp2, 0
+ br i1 %tmp3, label %bb3, label %bb1
+
+bb1:
+ %tmp4 = add nuw i32 %arg, %arg3
+ %tmp5 = icmp eq i32 %tmp4, 0
+ br i1 %tmp5, label %bb4, label %bb2
+
+bb2:
+ ret i32 0
+
+bb3:
+ ret i32 1
+
+bb4:
+ ret i32 2
+}
+
+; Subtraction does not produce the value of zero in case of overflow, so
+; "nsw" is not needed for the equality check against zero.
+define i32 @fun3(i32 %arg, i32 %arg2, i32 %arg3) {
+; CHECK-LABEL: fun3:
+; CHECK: jle .LBB3_2{{$}}
+; CHECK: je .LBB3_4{{$}}
+
+bb:
+ %tmp2 = sub nsw i32 %arg, %arg2
+ %tmp3 = icmp sgt i32 %tmp2, 0
+ br i1 %tmp3, label %bb3, label %bb1
+
+bb1:
+ %tmp4 = sub nsw i32 %arg, %arg3
+ %tmp5 = icmp eq i32 %tmp4, 0
+ br i1 %tmp5, label %bb4, label %bb2
+
+bb2:
+ ret i32 0
+
+bb3:
+ ret i32 1
+
+bb4:
+ ret i32 2
+}
+
+; No "nsw" flag
+define i32 @fun4(i32 %arg, i32 %arg2, i32 %arg3) {
+; CHECK-LABEL: fun4:
+; CHECK: cijle
+; CHECK: je .LBB4_4{{$}}
+
+bb:
+ %tmp2 = sub i32 %arg, %arg2
+ %tmp3 = icmp sgt i32 %tmp2, 0
+ br i1 %tmp3, label %bb3, label %bb1
+
+bb1:
+ %tmp4 = sub i32 %arg, %arg3
+ %tmp5 = icmp eq i32 %tmp4, 0
+ br i1 %tmp5, label %bb4, label %bb2
+
+bb2:
+ ret i32 0
+
+bb3:
+ ret i32 1
+
+bb4:
+ ret i32 2
+}
+
+; "nuw" flag
+define i32 @fun5(i32 %arg, i32 %arg2, i32 %arg3) {
+; CHECK-LABEL: fun5:
+; CHECK: cijle
+; CHECK: je .LBB5_4{{$}}
+
+bb:
+ %tmp2 = sub nuw i32 %arg, %arg2
+ %tmp3 = icmp sgt i32 %tmp2, 0
+ br i1 %tmp3, label %bb3, label %bb1
+
+bb1:
+ %tmp4 = sub nuw i32 %arg, %arg3
+ %tmp5 = icmp eq i32 %tmp4, 0
+ br i1 %tmp5, label %bb4, label %bb2
+
+bb2:
+ ret i32 0
+
+bb3:
+ ret i32 1
+
+bb4:
+ ret i32 2
+}
diff --git a/llvm/test/CodeGen/SystemZ/int-cmp-57.ll b/llvm/test/CodeGen/SystemZ/int-cmp-57.ll
new file mode 100644
index 00000000000..a49edc19655
--- /dev/null
+++ b/llvm/test/CodeGen/SystemZ/int-cmp-57.ll
@@ -0,0 +1,103 @@
+; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z14 -disable-cgp | FileCheck %s
+;
+; Check that signed comparisons against 0 are eliminated if the defining
+; instruction is an add with immediate.
+;
+; Addition of an immediate does not depend on the "nsw" flag, since the
+; result can be predicted in case of overflow. For example, if adding a
+; positive immediate gives overflow, the result must be negative.
+
+; Addition of a negative immediate gives a positive result in case of
+; overflow (except for the case of the minimum value which may also result in
+; a zero result).
+define i32 @fun0(i32 %arg) {
+; CHECK-LABEL: fun0:
+; CHECK: ahik
+; CHECK-NEXT: locre
+bb:
+ %tmp = add i32 %arg, -1
+ %tmp1 = icmp eq i32 %tmp, 0
+ %res = select i1 %tmp1, i32 %tmp, i32 %arg
+ ret i32 %res
+}
+
+define i32 @fun1(i32 %arg) {
+; CHECK-LABEL: fun1:
+; CHECK: ahik
+; CHECK-NEXT: locrnle
+bb:
+ %tmp = add i32 %arg, -1
+ %tmp1 = icmp sgt i32 %tmp, 0
+ %res = select i1 %tmp1, i32 %tmp, i32 %arg
+ ret i32 %res
+}
+
+define i32 @fun2(i32 %arg) {
+; CHECK-LABEL: fun2:
+; CHECK: ahik
+; CHECK-NEXT: locrl
+bb:
+ %tmp = add i32 %arg, -1
+ %tmp1 = icmp slt i32 %tmp, 0
+ %res = select i1 %tmp1, i32 %tmp, i32 %arg
+ ret i32 %res
+}
+
+; Addition of a positive immediate gives a negative result in case of overflow.
+define i32 @fun3(i32 %arg) {
+; CHECK-LABEL: fun3:
+; CHECK: ahik
+; CHECK-NEXT: locre
+bb:
+ %tmp = add i32 %arg, 1
+ %tmp1 = icmp eq i32 %tmp, 0
+ %res = select i1 %tmp1, i32 %tmp, i32 %arg
+ ret i32 %res
+}
+
+define i32 @fun4(i32 %arg) {
+; CHECK-LABEL: fun4:
+; CHECK: ahik
+; CHECK-NEXT: locrh
+bb:
+ %tmp = add i32 %arg, 1
+ %tmp1 = icmp sgt i32 %tmp, 0
+ %res = select i1 %tmp1, i32 %tmp, i32 %arg
+ ret i32 %res
+}
+
+define i32 @fun5(i32 %arg) {
+; CHECK-LABEL: fun5:
+; CHECK: ahik
+; CHECK-NEXT: locrnhe
+bb:
+ %tmp = add i32 %arg, 1
+ %tmp1 = icmp slt i32 %tmp, 0
+ %res = select i1 %tmp1, i32 %tmp, i32 %arg
+ ret i32 %res
+}
+
+; Addition of the minimum value gives a positive or zero result.
+define i32 @fun6(i32 %arg) {
+; CHECK-LABEL: fun6:
+; CHECK: afi
+; CHECK-NEXT: chi
+; CHECK-NEXT: locrlh
+bb:
+ %tmp = add i32 %arg, -2147483648
+ %tmp1 = icmp eq i32 %tmp, 0
+ %res = select i1 %tmp1, i32 %tmp, i32 %arg
+ ret i32 %res
+}
+
+define i32 @fun7(i32 %arg) {
+; CHECK-LABEL: fun7:
+; CHECK: afi
+; CHECK-NEXT: chi
+; CHECK-NEXT: locrle
+bb:
+ %tmp = add i32 %arg, -2147483648
+ %tmp1 = icmp sgt i32 %tmp, 0
+ %res = select i1 %tmp1, i32 %tmp, i32 %arg
+ ret i32 %res
+}
diff --git a/llvm/test/CodeGen/SystemZ/int-cmp-58.mir b/llvm/test/CodeGen/SystemZ/int-cmp-58.mir
new file mode 100644
index 00000000000..0cdcbf8181a
--- /dev/null
+++ b/llvm/test/CodeGen/SystemZ/int-cmp-58.mir
@@ -0,0 +1,71 @@
+# RUN: llc -mtriple=s390x-linux-gnu -mcpu=z14 -start-before=postrapseudos %s \
+# RUN: -o - | FileCheck %s
+#
+# Test that the CC values of logical adds and subs can be used in compare
+# elimination in the cases of EQ/NE.
+
+# CHECK-LABEL: fun0:
+# CHECK: alr %r3, %r2
+# CHECK-NEXT: locrhe %r2, %r3
+# CHECK-NEXT: alr %r3, %r2
+# CHECK-NEXT: locrnhe %r2, %r3
+# CHECK-NEXT: alr %r3, %r2
+# CHECK-NEXT: chi %r3, 0
+# CHECK-NEXT: locrle %r2, %r3
+# CHECK-NEXT: alr %r3, %r2
+# CHECK-NEXT: chi %r3, 0
+# CHECK-NEXT: locrhe %r2, %r3
+# CHECK-NEXT: slrk %r3, %r2, %r3
+# CHECK-NEXT: locrh %r2, %r3
+# CHECK-NEXT: slrk %r3, %r2, %r3
+# CHECK-NEXT: locrnhe %r2, %r3
+# CHECK-NEXT: slrk %r3, %r2, %r3
+# CHECK-NEXT: chi %r3, 0
+# CHECK-NEXT: locrle %r2, %r3
+# CHECK-NEXT: slrk %r3, %r2, %r3
+# CHECK-NEXT: chi %r3, 0
+# CHECK-NEXT: locrhe %r2, %r3
+
+
+--- |
+ define i32 @fun0(i32 %arg1, i32 %arg2) { bb: ret i32 0 }
+...
+---
+name: fun0
+body: |
+ bb.0:
+
+ renamable $r3l = ALRK renamable $r2l, killed renamable $r3l, implicit-def dead $cc
+ CHIMux renamable $r3l, 0, implicit-def $cc
+ renamable $r2l = LOCR killed renamable $r2l, killed renamable $r3l, 14, 8, implicit killed $cc
+
+ renamable $r3l = ALRK renamable $r2l, killed renamable $r3l, implicit-def dead $cc
+ CHIMux renamable $r3l, 0, implicit-def $cc
+ renamable $r2l = LOCR killed renamable $r2l, killed renamable $r3l, 14, 6, implicit killed $cc
+
+ renamable $r3l = ALRK renamable $r2l, killed renamable $r3l, implicit-def dead $cc
+ CHIMux renamable $r3l, 0, implicit-def $cc
+ renamable $r2l = LOCR killed renamable $r2l, killed renamable $r3l, 14, 12, implicit killed $cc
+
+ renamable $r3l = ALRK renamable $r2l, killed renamable $r3l, implicit-def dead $cc
+ CHIMux renamable $r3l, 0, implicit-def $cc
+ renamable $r2l = LOCR killed renamable $r2l, killed renamable $r3l, 14, 10, implicit killed $cc
+
+ renamable $r3l = SLRK renamable $r2l, killed renamable $r3l, implicit-def dead $cc
+ CHIMux renamable $r3l, 0, implicit-def $cc
+ renamable $r2l = LOCR killed renamable $r2l, killed renamable $r3l, 14, 8, implicit killed $cc
+
+ renamable $r3l = SLRK renamable $r2l, killed renamable $r3l, implicit-def dead $cc
+ CHIMux renamable $r3l, 0, implicit-def $cc
+ renamable $r2l = LOCR killed renamable $r2l, killed renamable $r3l, 14, 6, implicit killed $cc
+
+ renamable $r3l = SLRK renamable $r2l, killed renamable $r3l, implicit-def dead $cc
+ CHIMux renamable $r3l, 0, implicit-def $cc
+ renamable $r2l = LOCR killed renamable $r2l, killed renamable $r3l, 14, 12, implicit killed $cc
+
+ renamable $r3l = SLRK renamable $r2l, killed renamable $r3l, implicit-def dead $cc
+ CHIMux renamable $r3l, 0, implicit-def $cc
+ renamable $r2l = LOCR killed renamable $r2l, killed renamable $r3l, 14, 10, implicit killed $cc
+
+ Return implicit $r2l
+...
OpenPOWER on IntegriCloud