summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/CodeGen/SystemZ/asm-18.ll6
-rw-r--r--llvm/test/CodeGen/SystemZ/ctpop-01.ll26
-rw-r--r--llvm/test/CodeGen/SystemZ/int-add-05.ll8
-rw-r--r--llvm/test/CodeGen/SystemZ/int-sub-11.ll22
-rw-r--r--llvm/test/CodeGen/SystemZ/scalar-ctlz.ll28
-rw-r--r--llvm/test/CodeGen/SystemZ/store_nonbytesized_vecs.ll38
-rw-r--r--llvm/test/CodeGen/SystemZ/vec-combine-02.ll2
7 files changed, 75 insertions, 55 deletions
diff --git a/llvm/test/CodeGen/SystemZ/asm-18.ll b/llvm/test/CodeGen/SystemZ/asm-18.ll
index 1c125fc4728..459dfd11665 100644
--- a/llvm/test/CodeGen/SystemZ/asm-18.ll
+++ b/llvm/test/CodeGen/SystemZ/asm-18.ll
@@ -603,13 +603,13 @@ define void @f27() {
}
; Test three-operand halfword immediate addition involving mixtures of low
-; and high registers. RISBHG/AIH would be OK too, instead of AHIK/RISBHG.
+; and high registers. AHIK/RISBHG would be OK too, instead of RISBHG/AIH.
define i32 @f28(i32 %old) {
; CHECK-LABEL: f28:
; CHECK: ahik [[REG1:%r[0-5]]], %r2, 14
; CHECK: stepa %r2, [[REG1]]
-; CHECK: ahik [[TMP:%r[0-5]]], [[REG1]], 254
-; CHECK: risbhg [[REG2:%r[0-5]]], [[TMP]], 0, 159, 32
+; CHECK: risbhg [[REG1]], [[REG1]], 0, 159, 32
+; CHECK: aih [[REG1]], 254
; CHECK: stepb [[REG1]], [[REG2]]
; CHECK: risbhg [[REG3:%r[0-5]]], [[REG2]], 0, 159, 0
; CHECK: aih [[REG3]], 127
diff --git a/llvm/test/CodeGen/SystemZ/ctpop-01.ll b/llvm/test/CodeGen/SystemZ/ctpop-01.ll
index ad80f9f2151..4fc6f54fe31 100644
--- a/llvm/test/CodeGen/SystemZ/ctpop-01.ll
+++ b/llvm/test/CodeGen/SystemZ/ctpop-01.ll
@@ -9,10 +9,10 @@ define i32 @f1(i32 %a) {
; CHECK-LABEL: f1:
; CHECK: popcnt %r0, %r2
; CHECK: sllk %r1, %r0, 16
-; CHECK: ar %r1, %r0
-; CHECK: sllk %r2, %r1, 8
-; CHECK: ar %r2, %r1
-; CHECK: srl %r2, 24
+; CHECK: ar %r0, %r1
+; CHECK: sllk %r1, %r0, 8
+; CHECK: ar %r0, %r1
+; CHECK: srlk %r2, %r0, 24
; CHECK: br %r14
%popcnt = call i32 @llvm.ctpop.i32(i32 %a)
@@ -23,9 +23,9 @@ define i32 @f2(i32 %a) {
; CHECK-LABEL: f2:
; CHECK: llhr %r0, %r2
; CHECK: popcnt %r0, %r0
-; CHECK: risblg %r2, %r0, 16, 151, 8
-; CHECK: ar %r2, %r0
-; CHECK: srl %r2, 8
+; CHECK: risblg %r1, %r0, 16, 151, 8
+; CHECK: ar %r0, %r1
+; CHECK: srlk %r2, %r0, 8
; CHECK: br %r14
%and = and i32 %a, 65535
%popcnt = call i32 @llvm.ctpop.i32(i32 %and)
@@ -46,12 +46,12 @@ define i64 @f4(i64 %a) {
; CHECK-LABEL: f4:
; CHECK: popcnt %r0, %r2
; CHECK: sllg %r1, %r0, 32
-; CHECK: agr %r1, %r0
-; CHECK: sllg %r0, %r1, 16
+; CHECK: agr %r0, %r1
+; CHECK: sllg %r1, %r0, 16
; CHECK: agr %r0, %r1
; CHECK: sllg %r1, %r0, 8
-; CHECK: agr %r1, %r0
-; CHECK: srlg %r2, %r1, 56
+; CHECK: agr %r0, %r1
+; CHECK: srlg %r2, %r0, 56
; CHECK: br %r14
%popcnt = call i64 @llvm.ctpop.i64(i64 %a)
ret i64 %popcnt
@@ -76,8 +76,8 @@ define i64 @f6(i64 %a) {
; CHECK: llghr %r0, %r2
; CHECK: popcnt %r0, %r0
; CHECK: risbg %r1, %r0, 48, 183, 8
-; CHECK: agr %r1, %r0
-; CHECK: srlg %r2, %r1, 8
+; CHECK: agr %r0, %r1
+; CHECK: srlg %r2, %r0, 8
; CHECK: br %r14
%and = and i64 %a, 65535
%popcnt = call i64 @llvm.ctpop.i64(i64 %and)
diff --git a/llvm/test/CodeGen/SystemZ/int-add-05.ll b/llvm/test/CodeGen/SystemZ/int-add-05.ll
index 840e3827712..554662f253b 100644
--- a/llvm/test/CodeGen/SystemZ/int-add-05.ll
+++ b/llvm/test/CodeGen/SystemZ/int-add-05.ll
@@ -1,7 +1,7 @@
; Test 64-bit addition in which the second operand is variable.
;
-; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s
-; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 | FileCheck %s
+; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s --check-prefixes=CHECK,Z10
+; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 | FileCheck %s --check-prefixes=CHECK,Z196
declare i64 @foo()
@@ -97,10 +97,12 @@ define i64 @f8(i64 %a, i64 %src, i64 %index) {
}
; Check that additions of spilled values can use AG rather than AGR.
+; Note: Z196 is suboptimal with one unfolded reload.
define i64 @f9(i64 *%ptr0) {
; CHECK-LABEL: f9:
; CHECK: brasl %r14, foo@PLT
-; CHECK: ag %r2, 160(%r15)
+; Z10: ag %r2, 168(%r15)
+; Z196: ag %r0, 168(%r15)
; CHECK: br %r14
%ptr1 = getelementptr i64, i64 *%ptr0, i64 2
%ptr2 = getelementptr i64, i64 *%ptr0, i64 4
diff --git a/llvm/test/CodeGen/SystemZ/int-sub-11.ll b/llvm/test/CodeGen/SystemZ/int-sub-11.ll
new file mode 100644
index 00000000000..56759160744
--- /dev/null
+++ b/llvm/test/CodeGen/SystemZ/int-sub-11.ll
@@ -0,0 +1,22 @@
+; Test of subtraction that involves a constant as the first operand
+;
+; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 | FileCheck %s
+
+; Check highest 16-bit signed int immediate value.
+define i64 @f1(i64 %a) {
+; CHECK-LABEL: f1:
+; CHECK: lghi %r0, 32767
+; CHECK: sgrk %r2, %r0, %r2
+; CHECK: br %r14
+ %sub = sub i64 32767, %a
+ ret i64 %sub
+}
+; Check highest 32-bit signed int immediate value.
+define i64 @f2(i64 %a) {
+; CHECK-LABEL: f2:
+; CHECK: lgfi %r0, 2147483647
+; CHECK: sgrk %r2, %r0, %r2
+; CHECK: br %r14
+ %sub = sub i64 2147483647, %a
+ ret i64 %sub
+}
diff --git a/llvm/test/CodeGen/SystemZ/scalar-ctlz.ll b/llvm/test/CodeGen/SystemZ/scalar-ctlz.ll
index 15a0e37cbf6..b3839ecdd99 100644
--- a/llvm/test/CodeGen/SystemZ/scalar-ctlz.ll
+++ b/llvm/test/CodeGen/SystemZ/scalar-ctlz.ll
@@ -55,10 +55,9 @@ define i16 @f4(i16 %arg) {
; CHECK-LABEL: %bb.0:
; CHECK-NEXT: # kill
; CHECK-NEXT: llghr %r0, %r2
-; CHECK-NEXT: flogr %r2, %r0
-; CHECK-NEXT: aghi %r2, -32
-; CHECK-NEXT: ahi %r2, -16
-; CHECK-NEXT: # kill
+; CHECK-NEXT: flogr %r0, %r0
+; CHECK-NEXT: aghi %r0, -32
+; CHECK-NEXT: ahik %r2, %r0, -16
; CHECK-NEXT: br %r14
%1 = tail call i16 @llvm.ctlz.i16(i16 %arg, i1 false)
ret i16 %1
@@ -69,10 +68,9 @@ define i16 @f5(i16 %arg) {
; CHECK-LABEL: %bb.0:
; CHECK-NEXT: # kill
; CHECK-NEXT: llghr %r0, %r2
-; CHECK-NEXT: flogr %r2, %r0
-; CHECK-NEXT: aghi %r2, -32
-; CHECK-NEXT: ahi %r2, -16
-; CHECK-NEXT: # kill
+; CHECK-NEXT: flogr %r0, %r0
+; CHECK-NEXT: aghi %r0, -32
+; CHECK-NEXT: ahik %r2, %r0, -16
; CHECK-NEXT: br %r14
%1 = tail call i16 @llvm.ctlz.i16(i16 %arg, i1 true)
ret i16 %1
@@ -83,10 +81,9 @@ define i8 @f6(i8 %arg) {
; CHECK-LABEL: %bb.0:
; CHECK-NEXT: # kill
; CHECK-NEXT: llgcr %r0, %r2
-; CHECK-NEXT: flogr %r2, %r0
-; CHECK-NEXT: aghi %r2, -32
-; CHECK-NEXT: ahi %r2, -24
-; CHECK-NEXT: # kill
+; CHECK-NEXT: flogr %r0, %r0
+; CHECK-NEXT: aghi %r0, -32
+; CHECK-NEXT: ahik %r2, %r0, -24
; CHECK-NEXT: br %r14
%1 = tail call i8 @llvm.ctlz.i8(i8 %arg, i1 false)
ret i8 %1
@@ -97,10 +94,9 @@ define i8 @f7(i8 %arg) {
; CHECK-LABEL: %bb.0:
; CHECK-NEXT: # kill
; CHECK-NEXT: llgcr %r0, %r2
-; CHECK-NEXT: flogr %r2, %r0
-; CHECK-NEXT: aghi %r2, -32
-; CHECK-NEXT: ahi %r2, -24
-; CHECK-NEXT: # kill
+; CHECK-NEXT: flogr %r0, %r0
+; CHECK-NEXT: aghi %r0, -32
+; CHECK-NEXT: ahik %r2, %r0, -24
; CHECK-NEXT: br %r14
%1 = tail call i8 @llvm.ctlz.i8(i8 %arg, i1 true)
ret i8 %1
diff --git a/llvm/test/CodeGen/SystemZ/store_nonbytesized_vecs.ll b/llvm/test/CodeGen/SystemZ/store_nonbytesized_vecs.ll
index 60a6a180467..839ab78b034 100644
--- a/llvm/test/CodeGen/SystemZ/store_nonbytesized_vecs.ll
+++ b/llvm/test/CodeGen/SystemZ/store_nonbytesized_vecs.ll
@@ -75,17 +75,17 @@ define void @fun2(<8 x i32> %src, <8 x i31>* %p)
; CHECK-NEXT: stmg %r14, %r15, 112(%r15)
; CHECK-NEXT: .cfi_offset %r14, -48
; CHECK-NEXT: .cfi_offset %r15, -40
-; CHECK-NEXT: vlgvf %r3, %v26, 1
-; CHECK-NEXT: vlgvf %r1, %v26, 2
-; CHECK-NEXT: risbgn %r4, %r3, 0, 129, 62
-; CHECK-NEXT: rosbg %r4, %r1, 2, 32, 31
+; CHECK-DAG: vlgvf [[REG11:%r[0-9]+]], %v26, 1
+; CHECK-DAG: vlgvf [[REG12:%r[0-9]+]], %v26, 2
+; CHECK-DAG: risbgn [[REG13:%r[0-9]+]], [[REG11]], 0, 129, 62
+; CHECK-DAG: rosbg [[REG13]], [[REG12]], 2, 32, 31
; CHECK-DAG: vlgvf %r0, %v26, 3
-; CHECK-DAG: rosbg %r4, %r0, 33, 63, 0
+; CHECK-DAG: rosbg [[REG13]], %r0, 33, 63, 0
; CHECK-DAG: stc %r0, 30(%r2)
-; CHECK-DAG: srl %r0, 8
+; CHECK-DAG: srlk %r1, %r0, 8
; CHECK-DAG: vlgvf [[REG0:%r[0-9]+]], %v24, 1
; CHECK-DAG: vlgvf [[REG1:%r[0-9]+]], %v24, 0
-; CHECK-DAG: sth %r0, 28(%r2)
+; CHECK-DAG: sth %r1, 28(%r2)
; CHECK-DAG: vlgvf [[REG2:%r[0-9]+]], %v24, 2
; CHECK-DAG: risbgn [[REG3:%r[0-9]+]], [[REG0]], 0, 133, 58
; CHECK-DAG: rosbg [[REG3]], [[REG2]], 6, 36, 27
@@ -95,18 +95,18 @@ define void @fun2(<8 x i32> %src, <8 x i31>* %p)
; CHECK-DAG: rosbg [[REG3]], [[REG5]], 37, 63, 60
; CHECK-DAG: sllg [[REG6:%r[0-9]+]], [[REG4]], 8
; CHECK-DAG: rosbg [[REG6]], [[REG3]], 56, 63, 8
-; CHECK-NEXT: stg [[REG6]], 0(%r2)
-; CHECK-NEXT: srlg [[REG7:%r[0-9]+]], %r4, 24
-; CHECK-NEXT: st [[REG7]], 24(%r2)
-; CHECK-NEXT: vlgvf [[REG8:%r[0-9]+]], %v26, 0
-; CHECK-NEXT: risbgn [[REG10:%r[0-9]+]], [[REG5]], 0, 131, 60
-; CHECK-NEXT: rosbg [[REG10]], [[REG8]], 4, 34, 29
-; CHECK-NEXT: sllg [[REG9:%r[0-9]+]], [[REG3]], 8
-; CHECK-NEXT: rosbg [[REG10]], %r3, 35, 63, 62
-; CHECK-NEXT: rosbg [[REG9]], [[REG10]], 56, 63, 8
-; CHECK-NEXT: stg [[REG9]], 8(%r2)
-; CHECK-NEXT: sllg %r0, [[REG10]], 8
-; CHECK-NEXT: rosbg %r0, %r4, 56, 63, 8
+; CHECK-DAG: stg [[REG6]], 0(%r2)
+; CHECK-DAG: srlg [[REG7:%r[0-9]+]], [[REG13]], 24
+; CHECK-DAG: st [[REG7]], 24(%r2)
+; CHECK-DAG: vlgvf [[REG8:%r[0-9]+]], %v26, 0
+; CHECK-DAG: risbgn [[REG10:%r[0-9]+]], [[REG5]], 0, 131, 60
+; CHECK-DAG: rosbg [[REG10]], [[REG8]], 4, 34, 29
+; CHECK-DAG: sllg [[REG9:%r[0-9]+]], [[REG3]], 8
+; CHECK-DAG: rosbg [[REG10]], [[REG11]], 35, 63, 62
+; CHECK-DAG: rosbg [[REG9]], [[REG10]], 56, 63, 8
+; CHECK-DAG: stg [[REG9]], 8(%r2)
+; CHECK-DAG: sllg %r0, [[REG10]], 8
+; CHECK-DAG: rosbg %r0, [[REG13]], 56, 63, 8
; CHECK-NEXT: stg %r0, 16(%r2)
; CHECK-NEXT: lmg %r14, %r15, 112(%r15)
; CHECK-NEXT: br %r14
diff --git a/llvm/test/CodeGen/SystemZ/vec-combine-02.ll b/llvm/test/CodeGen/SystemZ/vec-combine-02.ll
index db0bf849017..2e0a83354c5 100644
--- a/llvm/test/CodeGen/SystemZ/vec-combine-02.ll
+++ b/llvm/test/CodeGen/SystemZ/vec-combine-02.ll
@@ -408,7 +408,7 @@ define i32 @f9(double %scalar0, double %scalar1, double %scalar2,
; CHECK-NOT: vmrh
; CHECK: ar {{%r[0-5]}},
; CHECK: ar {{%r[0-5]}},
-; CHECK: or %r2,
+; CHECK: ork %r2,
; CHECK: br %r14
%vec0 = insertelement <2 x double> undef, double %scalar0, i32 0
%vec1 = insertelement <2 x double> undef, double %scalar1, i32 0
OpenPOWER on IntegriCloud