57 lines · plain
1; Test 128-bit addition in which the second operand is constant.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s4 5; Check additions of 1. The XOR ensures that we don't instead load the6; constant into a register and use memory addition.7define void @f1(ptr %aptr) {8; CHECK-LABEL: f1:9; CHECK: algfi {{%r[0-5]}}, 110; CHECK: alcg11; CHECK: br %r1412 %a = load i128, ptr %aptr13 %xor = xor i128 %a, 12814 %add = add i128 %xor, 115 store i128 %add, ptr %aptr16 ret void17}18 19; Check the high end of the ALGFI range.20define void @f2(ptr %aptr) {21; CHECK-LABEL: f2:22; CHECK: algfi {{%r[0-5]}}, 429496729523; CHECK: alcg24; CHECK: br %r1425 %a = load i128, ptr %aptr26 %xor = xor i128 %a, 12827 %add = add i128 %xor, 429496729528 store i128 %add, ptr %aptr29 ret void30}31 32; Check the next value up, which must use register addition.33define void @f3(ptr %aptr) {34; CHECK-LABEL: f3:35; CHECK: algr36; CHECK: alcg37; CHECK: br %r1438 %a = load i128, ptr %aptr39 %xor = xor i128 %a, 12840 %add = add i128 %xor, 429496729641 store i128 %add, ptr %aptr42 ret void43}44 45; Check addition of -1, which must also use register addition.46define void @f4(ptr %aptr) {47; CHECK-LABEL: f4:48; CHECK: algr49; CHECK: alcg50; CHECK: br %r1451 %a = load i128, ptr %aptr52 %xor = xor i128 %a, 12853 %add = add i128 %xor, -154 store i128 %add, ptr %aptr55 ret void56}57