brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 62248d6 Raw
153 lines · plain
1; Combined logical operations involving complement on z152;3; RUN: llc -mcpu=z15 < %s -mtriple=s390x-linux-gnu | FileCheck %s4 5; And-with-complement 32-bit.6define i32 @f1(i32 %dummy, i32 %a, i32 %b) {7; CHECK-LABEL: f1:8; CHECK: ncrk %r2, %r3, %r49; CHECK: br %r1410  %neg = xor i32 %b, -111  %ret = and i32 %neg, %a12  ret i32 %ret13}14 15; And-with-complement 64-bit.16define i64 @f2(i64 %dummy, i64 %a, i64 %b) {17; CHECK-LABEL: f2:18; CHECK: ncgrk %r2, %r3, %r419; CHECK: br %r1420  %neg = xor i64 %b, -121  %ret = and i64 %neg, %a22  ret i64 %ret23}24 25; Or-with-complement 32-bit.26define i32 @f3(i32 %dummy, i32 %a, i32 %b) {27; CHECK-LABEL: f3:28; CHECK: ocrk %r2, %r3, %r429; CHECK: br %r1430  %neg = xor i32 %b, -131  %ret = or i32 %neg, %a32  ret i32 %ret33}34 35; Or-with-complement 64-bit.36define i64 @f4(i64 %dummy, i64 %a, i64 %b) {37; CHECK-LABEL: f4:38; CHECK: ocgrk %r2, %r3, %r439; CHECK: br %r1440  %neg = xor i64 %b, -141  %ret = or i64 %neg, %a42  ret i64 %ret43}44 45; NAND 32-bit.46define i32 @f5(i32 %dummy, i32 %a, i32 %b) {47; CHECK-LABEL: f5:48; CHECK: nnrk %r2, %r3, %r449; CHECK: br %r1450  %tmp = and i32 %a, %b51  %ret = xor i32 %tmp, -152  ret i32 %ret53}54 55; NAND 64-bit.56define i64 @f6(i64 %dummy, i64 %a, i64 %b) {57; CHECK-LABEL: f6:58; CHECK: nngrk %r2, %r3, %r459; CHECK: br %r1460  %tmp = and i64 %a, %b61  %ret = xor i64 %tmp, -162  ret i64 %ret63}64 65; NOR 32-bit.66define i32 @f7(i32 %dummy, i32 %a, i32 %b) {67; CHECK-LABEL: f7:68; CHECK: nork %r2, %r3, %r469; CHECK: br %r1470  %tmp = or i32 %a, %b71  %ret = xor i32 %tmp, -172  ret i32 %ret73}74 75; NOR 64-bit.76define i64 @f8(i64 %dummy, i64 %a, i64 %b) {77; CHECK-LABEL: f8:78; CHECK: nogrk %r2, %r3, %r479; CHECK: br %r1480  %tmp = or i64 %a, %b81  %ret = xor i64 %tmp, -182  ret i64 %ret83}84 85; NXOR 32-bit.86define i32 @f9(i32 %dummy, i32 %a, i32 %b) {87; CHECK-LABEL: f9:88; CHECK: nxrk %r2, %r3, %r489; CHECK: br %r1490  %tmp = xor i32 %a, %b91  %ret = xor i32 %tmp, -192  ret i32 %ret93}94 95; NXOR 64-bit.96define i64 @f10(i64 %dummy, i64 %a, i64 %b) {97; CHECK-LABEL: f10:98; CHECK: nxgrk %r2, %r3, %r499; CHECK: br %r14100  %tmp = xor i64 %a, %b101  %ret = xor i64 %tmp, -1102  ret i64 %ret103}104 105; Or-with-complement 32-bit of a constant.106define i32 @f11(i32 %a) {107; CHECK-LABEL: f11:108; CHECK: lhi [[REG:%r[0-5]]], -256109; CHECK: ocrk %r2, [[REG]], %r2110; CHECK: br %r14111  %neg = xor i32 %a, -1112  %ret = or i32 %neg, -256113  ret i32 %ret114}115 116; Or-with-complement 64-bit of a constant.117define i64 @f12(i64 %a) {118; CHECK-LABEL: f12:119; CHECK: lghi [[REG:%r[0-5]]], -256120; CHECK: ocgrk %r2, [[REG]], %r2121; CHECK: br %r14122  %neg = xor i64 %a, -1123  %ret = or i64 %neg, -256124  ret i64 %ret125}126 127; NXOR 32-bit (alternate match).128define i32 @f13(i32 %a) {129; CHECK-LABEL: f13:130; CHECK: lhi [[REG:%r[0-5]]], -256131; CHECK: nxrk %r2, %r2, [[REG]]132; CHECK: br %r14133  ; Use an opaque const so the pattern doesn't get optimized away early.134  %const = bitcast i32 -256 to i32135  %neg = xor i32 %a, -1136  %ret = xor i32 %neg, %const137  ret i32 %ret138}139 140; NXOR 64-bit (alternate match).141define i64 @f14(i64 %a) {142; CHECK-LABEL: f14:143; CHECK: lghi [[REG:%r[0-5]]], -256144; CHECK: nxgrk %r2, %r2, [[REG]]145; CHECK: br %r14146  ; Use an opaque const so the pattern doesn't get optimized away early.147  %const = bitcast i64 -256 to i64148  %neg = xor i64 %a, -1149  %ret = xor i64 %neg, %const150  ret i64 %ret151}152 153