1*9e3577ffSUlrich Weigand; Test insertions of 16-bit constants into an i64. 2*9e3577ffSUlrich Weigand; 3*9e3577ffSUlrich Weigand; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4*9e3577ffSUlrich Weigand 5*9e3577ffSUlrich Weigand; Check the lowest useful IILL value. (We use NILL rather than IILL 6*9e3577ffSUlrich Weigand; to clear 16 bits.) 7*9e3577ffSUlrich Weiganddefine i64 @f1(i64 %a) { 8*9e3577ffSUlrich Weigand; CHECK: f1: 9*9e3577ffSUlrich Weigand; CHECK-NOT: ni 10*9e3577ffSUlrich Weigand; CHECK: iill %r2, 1 11*9e3577ffSUlrich Weigand; CHECK: br %r14 12*9e3577ffSUlrich Weigand %and = and i64 %a, 18446744073709486080 13*9e3577ffSUlrich Weigand %or = or i64 %and, 1 14*9e3577ffSUlrich Weigand ret i64 %or 15*9e3577ffSUlrich Weigand} 16*9e3577ffSUlrich Weigand 17*9e3577ffSUlrich Weigand; Check a middle value. 18*9e3577ffSUlrich Weiganddefine i64 @f2(i64 %a) { 19*9e3577ffSUlrich Weigand; CHECK: f2: 20*9e3577ffSUlrich Weigand; CHECK-NOT: ni 21*9e3577ffSUlrich Weigand; CHECK: iill %r2, 32769 22*9e3577ffSUlrich Weigand; CHECK: br %r14 23*9e3577ffSUlrich Weigand %and = and i64 %a, -65536 24*9e3577ffSUlrich Weigand %or = or i64 %and, 32769 25*9e3577ffSUlrich Weigand ret i64 %or 26*9e3577ffSUlrich Weigand} 27*9e3577ffSUlrich Weigand 28*9e3577ffSUlrich Weigand; Check the highest useful IILL value. (We use OILL rather than IILL 29*9e3577ffSUlrich Weigand; to set 16 bits.) 30*9e3577ffSUlrich Weiganddefine i64 @f3(i64 %a) { 31*9e3577ffSUlrich Weigand; CHECK: f3: 32*9e3577ffSUlrich Weigand; CHECK-NOT: ni 33*9e3577ffSUlrich Weigand; CHECK: iill %r2, 65534 34*9e3577ffSUlrich Weigand; CHECK: br %r14 35*9e3577ffSUlrich Weigand %and = and i64 %a, 18446744073709486080 36*9e3577ffSUlrich Weigand %or = or i64 %and, 65534 37*9e3577ffSUlrich Weigand ret i64 %or 38*9e3577ffSUlrich Weigand} 39*9e3577ffSUlrich Weigand 40*9e3577ffSUlrich Weigand; Check the lowest useful IILH value. 41*9e3577ffSUlrich Weiganddefine i64 @f4(i64 %a) { 42*9e3577ffSUlrich Weigand; CHECK: f4: 43*9e3577ffSUlrich Weigand; CHECK-NOT: ni 44*9e3577ffSUlrich Weigand; CHECK: iilh %r2, 1 45*9e3577ffSUlrich Weigand; CHECK: br %r14 46*9e3577ffSUlrich Weigand %and = and i64 %a, 18446744069414649855 47*9e3577ffSUlrich Weigand %or = or i64 %and, 65536 48*9e3577ffSUlrich Weigand ret i64 %or 49*9e3577ffSUlrich Weigand} 50*9e3577ffSUlrich Weigand 51*9e3577ffSUlrich Weigand; Check a middle value. 52*9e3577ffSUlrich Weiganddefine i64 @f5(i64 %a) { 53*9e3577ffSUlrich Weigand; CHECK: f5: 54*9e3577ffSUlrich Weigand; CHECK-NOT: ni 55*9e3577ffSUlrich Weigand; CHECK: iilh %r2, 32767 56*9e3577ffSUlrich Weigand; CHECK: br %r14 57*9e3577ffSUlrich Weigand %and = and i64 %a, -4294901761 58*9e3577ffSUlrich Weigand %or = or i64 %and, 2147418112 59*9e3577ffSUlrich Weigand ret i64 %or 60*9e3577ffSUlrich Weigand} 61*9e3577ffSUlrich Weigand 62*9e3577ffSUlrich Weigand; Check the highest useful IILH value. 63*9e3577ffSUlrich Weiganddefine i64 @f6(i64 %a) { 64*9e3577ffSUlrich Weigand; CHECK: f6: 65*9e3577ffSUlrich Weigand; CHECK-NOT: ni 66*9e3577ffSUlrich Weigand; CHECK: iilh %r2, 65534 67*9e3577ffSUlrich Weigand; CHECK: br %r14 68*9e3577ffSUlrich Weigand %and = and i64 %a, 18446744069414649855 69*9e3577ffSUlrich Weigand %or = or i64 %and, 4294836224 70*9e3577ffSUlrich Weigand ret i64 %or 71*9e3577ffSUlrich Weigand} 72*9e3577ffSUlrich Weigand 73*9e3577ffSUlrich Weigand; Check the lowest useful IIHL value. 74*9e3577ffSUlrich Weiganddefine i64 @f7(i64 %a) { 75*9e3577ffSUlrich Weigand; CHECK: f7: 76*9e3577ffSUlrich Weigand; CHECK-NOT: ni 77*9e3577ffSUlrich Weigand; CHECK: iihl %r2, 1 78*9e3577ffSUlrich Weigand; CHECK: br %r14 79*9e3577ffSUlrich Weigand %and = and i64 %a, 18446462603027808255 80*9e3577ffSUlrich Weigand %or = or i64 %and, 4294967296 81*9e3577ffSUlrich Weigand ret i64 %or 82*9e3577ffSUlrich Weigand} 83*9e3577ffSUlrich Weigand 84*9e3577ffSUlrich Weigand; Check a middle value. 85*9e3577ffSUlrich Weiganddefine i64 @f8(i64 %a) { 86*9e3577ffSUlrich Weigand; CHECK: f8: 87*9e3577ffSUlrich Weigand; CHECK-NOT: ni 88*9e3577ffSUlrich Weigand; CHECK: iihl %r2, 32767 89*9e3577ffSUlrich Weigand; CHECK: br %r14 90*9e3577ffSUlrich Weigand %and = and i64 %a, -281470681743361 91*9e3577ffSUlrich Weigand %or = or i64 %and, 140733193388032 92*9e3577ffSUlrich Weigand ret i64 %or 93*9e3577ffSUlrich Weigand} 94*9e3577ffSUlrich Weigand 95*9e3577ffSUlrich Weigand; Check the highest useful IIHL value. 96*9e3577ffSUlrich Weiganddefine i64 @f9(i64 %a) { 97*9e3577ffSUlrich Weigand; CHECK: f9: 98*9e3577ffSUlrich Weigand; CHECK-NOT: ni 99*9e3577ffSUlrich Weigand; CHECK: iihl %r2, 65534 100*9e3577ffSUlrich Weigand; CHECK: br %r14 101*9e3577ffSUlrich Weigand %and = and i64 %a, 18446462603027808255 102*9e3577ffSUlrich Weigand %or = or i64 %and, 281466386776064 103*9e3577ffSUlrich Weigand ret i64 %or 104*9e3577ffSUlrich Weigand} 105*9e3577ffSUlrich Weigand 106*9e3577ffSUlrich Weigand; Check the lowest useful IIHH value. 107*9e3577ffSUlrich Weiganddefine i64 @f10(i64 %a) { 108*9e3577ffSUlrich Weigand; CHECK: f10: 109*9e3577ffSUlrich Weigand; CHECK-NOT: ni 110*9e3577ffSUlrich Weigand; CHECK: iihh %r2, 1 111*9e3577ffSUlrich Weigand; CHECK: br %r14 112*9e3577ffSUlrich Weigand %and = and i64 %a, 281474976710655 113*9e3577ffSUlrich Weigand %or = or i64 %and, 281474976710656 114*9e3577ffSUlrich Weigand ret i64 %or 115*9e3577ffSUlrich Weigand} 116*9e3577ffSUlrich Weigand 117*9e3577ffSUlrich Weigand; Check a middle value. 118*9e3577ffSUlrich Weiganddefine i64 @f11(i64 %a) { 119*9e3577ffSUlrich Weigand; CHECK: f11: 120*9e3577ffSUlrich Weigand; CHECK-NOT: ni 121*9e3577ffSUlrich Weigand; CHECK: iihh %r2, 32767 122*9e3577ffSUlrich Weigand; CHECK: br %r14 123*9e3577ffSUlrich Weigand %and = and i64 %a, 281474976710655 124*9e3577ffSUlrich Weigand %or = or i64 %and, 9223090561878065152 125*9e3577ffSUlrich Weigand ret i64 %or 126*9e3577ffSUlrich Weigand} 127*9e3577ffSUlrich Weigand 128*9e3577ffSUlrich Weigand; Check the highest useful IIHH value. 129*9e3577ffSUlrich Weiganddefine i64 @f12(i64 %a) { 130*9e3577ffSUlrich Weigand; CHECK: f12: 131*9e3577ffSUlrich Weigand; CHECK-NOT: ni 132*9e3577ffSUlrich Weigand; CHECK: iihh %r2, 65534 133*9e3577ffSUlrich Weigand; CHECK: br %r14 134*9e3577ffSUlrich Weigand %and = and i64 %a, 281474976710655 135*9e3577ffSUlrich Weigand %or = or i64 %and, 18446181123756130304 136*9e3577ffSUlrich Weigand ret i64 %or 137*9e3577ffSUlrich Weigand} 138