[SystemZ] Add tests for ALHSIK and ALGHSIK

The insn definitions themselves crept into r186689, sorry.
This should be the last of the distinct-ops instructions.

llvm-svn: 186690
diff --git a/llvm/test/CodeGen/SystemZ/int-add-16.ll b/llvm/test/CodeGen/SystemZ/int-add-16.ll
index 409729f..36cc13e 100644
--- a/llvm/test/CodeGen/SystemZ/int-add-16.ll
+++ b/llvm/test/CodeGen/SystemZ/int-add-16.ll
@@ -20,3 +20,74 @@
   %low = extractelement <2 x i64> %addv, i32 1
   ret i64 %low
 }
+
+; Test addition of 1.
+define void @f2(i64 %a, i64 %b, i128 *%ptr) {
+; CHECK-LABEL: f2:
+; CHECK: alghsik {{%r[0-5]}}, %r3, 1
+; CHECK: alcgr
+; CHECK: br %r14
+  %x1 = insertelement <2 x i64> undef, i64 %a, i32 0
+  %x2 = insertelement <2 x i64> %x1, i64 %b, i32 1
+  %x = bitcast <2 x i64> %x2 to i128
+  %add = add i128 %x, 1
+  store i128 %add, i128 *%ptr
+  ret void
+}
+
+; Test the upper end of the ALGHSIK range.
+define void @f3(i64 %a, i64 %b, i128 *%ptr) {
+; CHECK-LABEL: f3:
+; CHECK: alghsik {{%r[0-5]}}, %r3, 32767
+; CHECK: alcgr
+; CHECK: br %r14
+  %x1 = insertelement <2 x i64> undef, i64 %a, i32 0
+  %x2 = insertelement <2 x i64> %x1, i64 %b, i32 1
+  %x = bitcast <2 x i64> %x2 to i128
+  %add = add i128 %x, 32767
+  store i128 %add, i128 *%ptr
+  ret void
+}
+
+; Test the next value up, which should use ALGFI instead.
+define void @f4(i64 %a, i64 %b, i128 *%ptr) {
+; CHECK-LABEL: f4:
+; CHECK: algfi %r3, 32768
+; CHECK: alcgr
+; CHECK: br %r14
+  %x1 = insertelement <2 x i64> undef, i64 %a, i32 0
+  %x2 = insertelement <2 x i64> %x1, i64 %b, i32 1
+  %x = bitcast <2 x i64> %x2 to i128
+  %add = add i128 %x, 32768
+  store i128 %add, i128 *%ptr
+  ret void
+}
+
+; Test the lower end of the ALGHSIK range.
+define void @f5(i64 %a, i64 %b, i128 *%ptr) {
+; CHECK-LABEL: f5:
+; CHECK: alghsik {{%r[0-5]}}, %r3, -32768
+; CHECK: alcgr
+; CHECK: br %r14
+  %x1 = insertelement <2 x i64> undef, i64 %a, i32 0
+  %x2 = insertelement <2 x i64> %x1, i64 %b, i32 1
+  %x = bitcast <2 x i64> %x2 to i128
+  %add = add i128 %x, -32768
+  store i128 %add, i128 *%ptr
+  ret void
+}
+
+; Test the next value down, which cannot use either ALGHSIK or ALGFI.
+define void @f6(i64 %a, i64 %b, i128 *%ptr) {
+; CHECK-LABEL: f6:
+; CHECK-NOT: alghsik
+; CHECK-NOT: algfi
+; CHECK: alcgr
+; CHECK: br %r14
+  %x1 = insertelement <2 x i64> undef, i64 %a, i32 0
+  %x2 = insertelement <2 x i64> %x1, i64 %b, i32 1
+  %x = bitcast <2 x i64> %x2 to i128
+  %add = add i128 %x, -32769
+  store i128 %add, i128 *%ptr
+  ret void
+}