brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 73922cc Raw
94 lines · plain
1; Test 128-bit addition when the distinct-operands facility is available.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z196 | FileCheck %s4 5; Test the case where both operands are in registers.6define i64 @f1(i64 %a, i64 %b, i64 %c, i64 %d, ptr %ptr) {7; CHECK-LABEL: f1:8; CHECK: algrk %r2, %r4, %r59; CHECK: alcgr10; CHECK: br %r1411  %x1 = insertelement <2 x i64> undef, i64 %b, i32 012  %x2 = insertelement <2 x i64> %x1, i64 %c, i32 113  %x = bitcast <2 x i64> %x2 to i12814  %y2 = insertelement <2 x i64> %x1, i64 %d, i32 115  %y = bitcast <2 x i64> %y2 to i12816  %add = add i128 %x, %y17  %addv = bitcast i128 %add to <2 x i64>18  %high = extractelement <2 x i64> %addv, i32 019  store i64 %high, ptr %ptr20  %low = extractelement <2 x i64> %addv, i32 121  ret i64 %low22}23 24; Test addition of 1.25define void @f2(i64 %a, i64 %b, ptr %ptr) {26; CHECK-LABEL: f2:27; CHECK: alghsik {{%r[0-5]}}, %r3, 128; CHECK: alcgr29; CHECK: br %r1430  %x1 = insertelement <2 x i64> undef, i64 %a, i32 031  %x2 = insertelement <2 x i64> %x1, i64 %b, i32 132  %x = bitcast <2 x i64> %x2 to i12833  %add = add i128 %x, 134  store i128 %add, ptr %ptr35  ret void36}37 38; Test the upper end of the ALGHSIK range.39define void @f3(i64 %a, i64 %b, ptr %ptr) {40; CHECK-LABEL: f3:41; CHECK: alghsik {{%r[0-5]}}, %r3, 3276742; CHECK: alcgr43; CHECK: br %r1444  %x1 = insertelement <2 x i64> undef, i64 %a, i32 045  %x2 = insertelement <2 x i64> %x1, i64 %b, i32 146  %x = bitcast <2 x i64> %x2 to i12847  %add = add i128 %x, 3276748  store i128 %add, ptr %ptr49  ret void50}51 52; Test the next value up, which should use ALGFI instead.53define void @f4(i64 %a, i64 %b, ptr %ptr) {54; CHECK-LABEL: f4:55; CHECK: algfi %r3, 3276856; CHECK: alcgr57; CHECK: br %r1458  %x1 = insertelement <2 x i64> undef, i64 %a, i32 059  %x2 = insertelement <2 x i64> %x1, i64 %b, i32 160  %x = bitcast <2 x i64> %x2 to i12861  %add = add i128 %x, 3276862  store i128 %add, ptr %ptr63  ret void64}65 66; Test the lower end of the ALGHSIK range.67define void @f5(i64 %a, i64 %b, ptr %ptr) {68; CHECK-LABEL: f5:69; CHECK: alghsik {{%r[0-5]}}, %r3, -3276870; CHECK: alcgr71; CHECK: br %r1472  %x1 = insertelement <2 x i64> undef, i64 %a, i32 073  %x2 = insertelement <2 x i64> %x1, i64 %b, i32 174  %x = bitcast <2 x i64> %x2 to i12875  %add = add i128 %x, -3276876  store i128 %add, ptr %ptr77  ret void78}79 80; Test the next value down, which cannot use either ALGHSIK or ALGFI.81define void @f6(i64 %a, i64 %b, ptr %ptr) {82; CHECK-LABEL: f6:83; CHECK-NOT: alghsik84; CHECK-NOT: algfi85; CHECK: alcgr86; CHECK: br %r1487  %x1 = insertelement <2 x i64> undef, i64 %a, i32 088  %x2 = insertelement <2 x i64> %x1, i64 %b, i32 189  %x = bitcast <2 x i64> %x2 to i12890  %add = add i128 %x, -3276991  store i128 %add, ptr %ptr92  ret void93}94