109 lines · plain
1; Test that we can use XI for byte operations that are expressed as i322; or i64 operations.3;4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s5 6; Zero extension to 32 bits, negative constant.7define void @f1(ptr %ptr) {8; CHECK-LABEL: f1:9; CHECK: xi 0(%r2), 25410; CHECK: br %r1411 %val = load i8, ptr %ptr12 %ext = zext i8 %val to i3213 %xor = xor i32 %ext, -214 %trunc = trunc i32 %xor to i815 store i8 %trunc, ptr %ptr16 ret void17}18 19; Zero extension to 64 bits, negative constant.20define void @f2(ptr %ptr) {21; CHECK-LABEL: f2:22; CHECK: xi 0(%r2), 25423; CHECK: br %r1424 %val = load i8, ptr %ptr25 %ext = zext i8 %val to i6426 %xor = xor i64 %ext, -227 %trunc = trunc i64 %xor to i828 store i8 %trunc, ptr %ptr29 ret void30}31 32; Zero extension to 32 bits, positive constant.33define void @f3(ptr %ptr) {34; CHECK-LABEL: f3:35; CHECK: xi 0(%r2), 25436; CHECK: br %r1437 %val = load i8, ptr %ptr38 %ext = zext i8 %val to i3239 %xor = xor i32 %ext, 25440 %trunc = trunc i32 %xor to i841 store i8 %trunc, ptr %ptr42 ret void43}44 45; Zero extension to 64 bits, positive constant.46define void @f4(ptr %ptr) {47; CHECK-LABEL: f4:48; CHECK: xi 0(%r2), 25449; CHECK: br %r1450 %val = load i8, ptr %ptr51 %ext = zext i8 %val to i6452 %xor = xor i64 %ext, 25453 %trunc = trunc i64 %xor to i854 store i8 %trunc, ptr %ptr55 ret void56}57 58; Sign extension to 32 bits, negative constant.59define void @f5(ptr %ptr) {60; CHECK-LABEL: f5:61; CHECK: xi 0(%r2), 25462; CHECK: br %r1463 %val = load i8, ptr %ptr64 %ext = sext i8 %val to i3265 %xor = xor i32 %ext, -266 %trunc = trunc i32 %xor to i867 store i8 %trunc, ptr %ptr68 ret void69}70 71; Sign extension to 64 bits, negative constant.72define void @f6(ptr %ptr) {73; CHECK-LABEL: f6:74; CHECK: xi 0(%r2), 25475; CHECK: br %r1476 %val = load i8, ptr %ptr77 %ext = sext i8 %val to i6478 %xor = xor i64 %ext, -279 %trunc = trunc i64 %xor to i880 store i8 %trunc, ptr %ptr81 ret void82}83 84; Sign extension to 32 bits, positive constant.85define void @f7(ptr %ptr) {86; CHECK-LABEL: f7:87; CHECK: xi 0(%r2), 25488; CHECK: br %r1489 %val = load i8, ptr %ptr90 %ext = sext i8 %val to i3291 %xor = xor i32 %ext, 25492 %trunc = trunc i32 %xor to i893 store i8 %trunc, ptr %ptr94 ret void95}96 97; Sign extension to 64 bits, positive constant.98define void @f8(ptr %ptr) {99; CHECK-LABEL: f8:100; CHECK: xi 0(%r2), 254101; CHECK: br %r14102 %val = load i8, ptr %ptr103 %ext = sext i8 %val to i64104 %xor = xor i64 %ext, 254105 %trunc = trunc i64 %xor to i8106 store i8 %trunc, ptr %ptr107 ret void108}109