diff options
-rw-r--r-- | llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp | 5 | ||||
-rw-r--r-- | llvm/test/CodeGen/SystemZ/dag-combine-02.ll | 4 | ||||
-rw-r--r-- | llvm/test/CodeGen/SystemZ/vec-intrinsics-01.ll | 71 | ||||
-rw-r--r-- | llvm/test/CodeGen/SystemZ/vec-intrinsics-02.ll | 17 |
4 files changed, 47 insertions, 50 deletions
diff --git a/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp b/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp index f12147cf3ea..81175013ed2 100644 --- a/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp +++ b/llvm/lib/Target/SystemZ/SystemZISelDAGToDAG.cpp @@ -1583,6 +1583,11 @@ SDValue SystemZDAGToDAGISel::expandSelectBoolean(SDNode *Node) { } void SystemZDAGToDAGISel::PreprocessISelDAG() { + // If we have conditional immediate loads, we always prefer + // using those over an IPM sequence. + if (Subtarget->hasLoadStoreOnCond2()) + return; + bool MadeChange = false; for (SelectionDAG::allnodes_iterator I = CurDAG->allnodes_begin(), diff --git a/llvm/test/CodeGen/SystemZ/dag-combine-02.ll b/llvm/test/CodeGen/SystemZ/dag-combine-02.ll index c73b49029e8..6786e2883da 100644 --- a/llvm/test/CodeGen/SystemZ/dag-combine-02.ll +++ b/llvm/test/CodeGen/SystemZ/dag-combine-02.ll @@ -94,8 +94,8 @@ define signext i32 @main(i32 signext, i8** nocapture readonly) local_unnamed_add ; <label>:61: ; preds = %13 ; CHECK-LABEL: %bb.6: -; CHECK: stgrl %r1, g_56 -; CHECK: llhrl %r1, g_56+6 +; CHECK: stgrl %r0, g_56 +; CHECK: llhrl %r0, g_56+6 ; CHECK: stgrl %r2, g_56 store i64 0, i64* @g_56, align 8 %62 = bitcast [4 x [7 x i16*]]* %3 to i8* diff --git a/llvm/test/CodeGen/SystemZ/vec-intrinsics-01.ll b/llvm/test/CodeGen/SystemZ/vec-intrinsics-01.ll index 6f5eb0691aa..8892b943709 100644 --- a/llvm/test/CodeGen/SystemZ/vec-intrinsics-01.ll +++ b/llvm/test/CodeGen/SystemZ/vec-intrinsics-01.ll @@ -1736,9 +1736,8 @@ define i32 @test_vceqbs(<16 x i8> %a, <16 x i8> %b) { define i32 @test_vceqbs_any_bool(<16 x i8> %a, <16 x i8> %b) { ; CHECK-LABEL: test_vceqbs_any_bool: ; CHECK: vceqbs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm %r2 -; CHECK: afi %r2, -536870912 -; CHECK: srl %r2, 31 +; CHECK: lhi %r2, 0 +; CHECK: lochile %r2, 1 ; CHECK: br %r14 %call = call {<16 x i8>, i32} @llvm.s390.vceqbs(<16 x i8> %a, <16 x i8> %b) %res = extractvalue {<16 x i8>, i32} %call, 1 @@ -1785,8 +1784,8 @@ define i32 @test_vceqhs(<8 x i16> %a, <8 x i16> %b) { define i32 @test_vceqhs_notall_bool(<8 x i16> %a, <8 x i16> %b) { ; CHECK-LABEL: test_vceqhs_notall_bool: ; CHECK: vceqhs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm [[REG:%r[0-5]]] -; CHECK: risblg %r2, [[REG]], 31, 159, 36 +; CHECK: lhi %r2, 0 +; CHECK: lochinhe %r2, 1 ; CHECK: br %r14 %call = call {<8 x i16>, i32} @llvm.s390.vceqhs(<8 x i16> %a, <8 x i16> %b) %res = extractvalue {<8 x i16>, i32} %call, 1 @@ -1834,8 +1833,8 @@ define i32 @test_vceqfs(<4 x i32> %a, <4 x i32> %b) { define i32 @test_vceqfs_none_bool(<4 x i32> %a, <4 x i32> %b) { ; CHECK-LABEL: test_vceqfs_none_bool: ; CHECK: vceqfs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm [[REG:%r[0-5]]] -; CHECK: risblg %r2, [[REG]], 31, 159, 35 +; CHECK: lhi %r2, 0 +; CHECK: lochio %r2, 1 ; CHECK: br %r14 %call = call {<4 x i32>, i32} @llvm.s390.vceqfs(<4 x i32> %a, <4 x i32> %b) %res = extractvalue {<4 x i32>, i32} %call, 1 @@ -1883,9 +1882,8 @@ define i32 @test_vceqgs(<2 x i64> %a, <2 x i64> %b) { define i32 @test_vceqgs_all_bool(<2 x i64> %a, <2 x i64> %b) { ; CHECK-LABEL: test_vceqgs_all_bool: ; CHECK: vceqgs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm %r2 -; CHECK: afi %r2, -268435456 -; CHECK: srl %r2, 31 +; CHECK: lhi %r2, 0 +; CHECK: lochie %r2, 1 ; CHECK: br %r14 %call = call {<2 x i64>, i32} @llvm.s390.vceqgs(<2 x i64> %a, <2 x i64> %b) %res = extractvalue {<2 x i64>, i32} %call, 1 @@ -1932,9 +1930,8 @@ define i32 @test_vchbs(<16 x i8> %a, <16 x i8> %b) { define i32 @test_vchbs_any_bool(<16 x i8> %a, <16 x i8> %b) { ; CHECK-LABEL: test_vchbs_any_bool: ; CHECK: vchbs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm %r2 -; CHECK: afi %r2, -536870912 -; CHECK: srl %r2, 31 +; CHECK: lhi %r2, 0 +; CHECK: lochile %r2, 1 ; CHECK: br %r14 %call = call {<16 x i8>, i32} @llvm.s390.vchbs(<16 x i8> %a, <16 x i8> %b) %res = extractvalue {<16 x i8>, i32} %call, 1 @@ -1981,8 +1978,8 @@ define i32 @test_vchhs(<8 x i16> %a, <8 x i16> %b) { define i32 @test_vchhs_notall_bool(<8 x i16> %a, <8 x i16> %b) { ; CHECK-LABEL: test_vchhs_notall_bool: ; CHECK: vchhs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm [[REG:%r[0-5]]] -; CHECK: risblg %r2, [[REG]], 31, 159, 36 +; CHECK: lhi %r2, 0 +; CHECK: lochinhe %r2, 1 ; CHECK: br %r14 %call = call {<8 x i16>, i32} @llvm.s390.vchhs(<8 x i16> %a, <8 x i16> %b) %res = extractvalue {<8 x i16>, i32} %call, 1 @@ -2030,8 +2027,8 @@ define i32 @test_vchfs(<4 x i32> %a, <4 x i32> %b) { define i32 @test_vchfs_none_bool(<4 x i32> %a, <4 x i32> %b) { ; CHECK-LABEL: test_vchfs_none_bool: ; CHECK: vchfs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm [[REG:%r[0-5]]] -; CHECK: risblg %r2, [[REG]], 31, 159, 35 +; CHECK: lhi %r2, 0 +; CHECK: lochio %r2, 1 ; CHECK: br %r14 %call = call {<4 x i32>, i32} @llvm.s390.vchfs(<4 x i32> %a, <4 x i32> %b) %res = extractvalue {<4 x i32>, i32} %call, 1 @@ -2078,9 +2075,8 @@ define i32 @test_vchgs(<2 x i64> %a, <2 x i64> %b) { define i32 @test_vchgs_all_bool(<2 x i64> %a, <2 x i64> %b) { ; CHECK-LABEL: test_vchgs_all_bool: ; CHECK: vchgs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm %r2 -; CHECK: afi %r2, -268435456 -; CHECK: srl %r2, 31 +; CHECK: lhi %r2, 0 +; CHECK: lochie %r2, 1 ; CHECK: br %r14 %call = call {<2 x i64>, i32} @llvm.s390.vchgs(<2 x i64> %a, <2 x i64> %b) %res = extractvalue {<2 x i64>, i32} %call, 1 @@ -2127,9 +2123,8 @@ define i32 @test_vchlbs(<16 x i8> %a, <16 x i8> %b) { define i32 @test_vchlbs_any_bool(<16 x i8> %a, <16 x i8> %b) { ; CHECK-LABEL: test_vchlbs_any_bool: ; CHECK: vchlbs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm %r2 -; CHECK: afi %r2, -536870912 -; CHECK: srl %r2, 31 +; CHECK: lhi %r2, 0 +; CHECK: lochile %r2, 1 ; CHECK: br %r14 %call = call {<16 x i8>, i32} @llvm.s390.vchlbs(<16 x i8> %a, <16 x i8> %b) %res = extractvalue {<16 x i8>, i32} %call, 1 @@ -2176,8 +2171,8 @@ define i32 @test_vchlhs(<8 x i16> %a, <8 x i16> %b) { define i32 @test_vchlhs_notall_bool(<8 x i16> %a, <8 x i16> %b) { ; CHECK-LABEL: test_vchlhs_notall_bool: ; CHECK: vchlhs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm [[REG:%r[0-5]]] -; CHECK: risblg %r2, [[REG]], 31, 159, 36 +; CHECK: lhi %r2, 0 +; CHECK: lochinhe %r2, 1 ; CHECK: br %r14 %call = call {<8 x i16>, i32} @llvm.s390.vchlhs(<8 x i16> %a, <8 x i16> %b) %res = extractvalue {<8 x i16>, i32} %call, 1 @@ -2225,8 +2220,8 @@ define i32 @test_vchlfs(<4 x i32> %a, <4 x i32> %b) { define i32 @test_vchlfs_none_bool(<4 x i32> %a, <4 x i32> %b) { ; CHECK-LABEL: test_vchlfs_none_bool: ; CHECK: vchlfs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm [[REG:%r[0-5]]] -; CHECK: risblg %r2, [[REG]], 31, 159, 35 +; CHECK: lhi %r2, 0 +; CHECK: lochio %r2, 1 ; CHECK: br %r14 %call = call {<4 x i32>, i32} @llvm.s390.vchlfs(<4 x i32> %a, <4 x i32> %b) %res = extractvalue {<4 x i32>, i32} %call, 1 @@ -2274,9 +2269,8 @@ define i32 @test_vchlgs(<2 x i64> %a, <2 x i64> %b) { define i32 @test_vchlgs_all_bool(<2 x i64> %a, <2 x i64> %b) { ; CHECK-LABEL: test_vchlgs_all_bool: ; CHECK: vchlgs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm %r2 -; CHECK: afi %r2, -268435456 -; CHECK: srl %r2, 31 +; CHECK: lhi %r2, 0 +; CHECK: lochie %r2, 1 ; CHECK: br %r14 %call = call {<2 x i64>, i32} @llvm.s390.vchlgs(<2 x i64> %a, <2 x i64> %b) %res = extractvalue {<2 x i64>, i32} %call, 1 @@ -3148,9 +3142,8 @@ define i32 @test_vfcedbs(<2 x double> %a, <2 x double> %b) { define i32 @test_vfcedbs_any_bool(<2 x double> %a, <2 x double> %b) { ; CHECK-LABEL: test_vfcedbs_any_bool: ; CHECK: vfcedbs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm %r2 -; CHECK: afi %r2, -536870912 -; CHECK: srl %r2, 31 +; CHECK: lhi %r2, 0 +; CHECK: lochile %r2, 1 ; CHECK: br %r14 %call = call {<2 x i64>, i32} @llvm.s390.vfcedbs(<2 x double> %a, <2 x double> %b) @@ -3201,8 +3194,8 @@ define i32 @test_vfchdbs(<2 x double> %a, <2 x double> %b) { define i32 @test_vfchdbs_notall_bool(<2 x double> %a, <2 x double> %b) { ; CHECK-LABEL: test_vfchdbs_notall_bool: ; CHECK: vfchdbs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm [[REG:%r[0-5]]] -; CHECK: risblg %r2, [[REG]], 31, 159, 36 +; CHECK: lhi %r2, 0 +; CHECK: lochinhe %r2, 1 ; CHECK: br %r14 %call = call {<2 x i64>, i32} @llvm.s390.vfchdbs(<2 x double> %a, <2 x double> %b) @@ -3253,8 +3246,8 @@ define i32 @test_vfchedbs(<2 x double> %a, <2 x double> %b) { define i32 @test_vfchedbs_none_bool(<2 x double> %a, <2 x double> %b) { ; CHECK-LABEL: test_vfchedbs_none_bool: ; CHECK: vfchedbs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm [[REG:%r[0-5]]] -; CHECK: risblg %r2, [[REG]], 31, 159, 35 +; CHECK: lhi %r2, 0 +; CHECK: lochio %r2, 1 ; CHECK: br %r14 %call = call {<2 x i64>, i32} @llvm.s390.vfchedbs(<2 x double> %a, <2 x double> %b) @@ -3305,8 +3298,8 @@ define i32 @test_vftcidb(<2 x double> %a) { define i32 @test_vftcidb_all_bool(<2 x double> %a) { ; CHECK-LABEL: test_vftcidb_all_bool: ; CHECK: vftcidb {{%v[0-9]+}}, %v24, 4094 -; CHECK: afi %r2, -268435456 -; CHECK: srl %r2, 31 +; CHECK: lhi %r2, 0 +; CHECK: lochie %r2, 1 ; CHECK: br %r14 %call = call {<2 x i64>, i32} @llvm.s390.vftcidb(<2 x double> %a, i32 4094) %res = extractvalue {<2 x i64>, i32} %call, 1 diff --git a/llvm/test/CodeGen/SystemZ/vec-intrinsics-02.ll b/llvm/test/CodeGen/SystemZ/vec-intrinsics-02.ll index 84c6a078403..397d10e02e2 100644 --- a/llvm/test/CodeGen/SystemZ/vec-intrinsics-02.ll +++ b/llvm/test/CodeGen/SystemZ/vec-intrinsics-02.ll @@ -218,9 +218,8 @@ define i32 @test_vfcesbs(<4 x float> %a, <4 x float> %b) { define i32 @test_vfcesbs_any_bool(<4 x float> %a, <4 x float> %b) { ; CHECK-LABEL: test_vfcesbs_any_bool: ; CHECK: vfcesbs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm %r2 -; CHECK: afi %r2, -536870912 -; CHECK: srl %r2, 31 +; CHECK: lhi %r2, 0 +; CHECK: lochile %r2, 1 ; CHECK: br %r14 %call = call {<4 x i32>, i32} @llvm.s390.vfcesbs(<4 x float> %a, <4 x float> %b) @@ -271,8 +270,8 @@ define i32 @test_vfchsbs(<4 x float> %a, <4 x float> %b) { define i32 @test_vfchsbs_notall_bool(<4 x float> %a, <4 x float> %b) { ; CHECK-LABEL: test_vfchsbs_notall_bool: ; CHECK: vfchsbs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm [[REG:%r[0-5]]] -; CHECK: risblg %r2, [[REG]], 31, 159, 36 +; CHECK: lhi %r2, 0 +; CHECK: lochinhe %r2, 1 ; CHECK: br %r14 %call = call {<4 x i32>, i32} @llvm.s390.vfchsbs(<4 x float> %a, <4 x float> %b) @@ -323,8 +322,8 @@ define i32 @test_vfchesbs(<4 x float> %a, <4 x float> %b) { define i32 @test_vfchesbs_none_bool(<4 x float> %a, <4 x float> %b) { ; CHECK-LABEL: test_vfchesbs_none_bool: ; CHECK: vfchesbs {{%v[0-9]+}}, %v24, %v26 -; CHECK: ipm [[REG:%r[0-5]]] -; CHECK: risblg %r2, [[REG]], 31, 159, 35 +; CHECK: lhi %r2, 0 +; CHECK: lochio %r2, 1 ; CHECK: br %r14 %call = call {<4 x i32>, i32} @llvm.s390.vfchesbs(<4 x float> %a, <4 x float> %b) @@ -375,8 +374,8 @@ define i32 @test_vftcisb(<4 x float> %a) { define i32 @test_vftcisb_all_bool(<4 x float> %a) { ; CHECK-LABEL: test_vftcisb_all_bool: ; CHECK: vftcisb {{%v[0-9]+}}, %v24, 4094 -; CHECK: afi %r2, -268435456 -; CHECK: srl %r2, 31 +; CHECK: lhi %r2, 0 +; CHECK: lochie %r2, 1 ; CHECK: br %r14 %call = call {<4 x i32>, i32} @llvm.s390.vftcisb(<4 x float> %a, i32 4094) %res = extractvalue {<4 x i32>, i32} %call, 1 |