diff options
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/SystemZ/asm-18.ll | 6 | ||||
| -rw-r--r-- | llvm/test/CodeGen/SystemZ/ctpop-01.ll | 26 | ||||
| -rw-r--r-- | llvm/test/CodeGen/SystemZ/int-add-05.ll | 8 | ||||
| -rw-r--r-- | llvm/test/CodeGen/SystemZ/int-sub-11.ll | 22 | ||||
| -rw-r--r-- | llvm/test/CodeGen/SystemZ/scalar-ctlz.ll | 28 | ||||
| -rw-r--r-- | llvm/test/CodeGen/SystemZ/store_nonbytesized_vecs.ll | 38 | ||||
| -rw-r--r-- | llvm/test/CodeGen/SystemZ/vec-combine-02.ll | 2 |
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 |

