; RUN: llc < %s

define void @test_add(i64 %AL, i64 %AH, i64 %BL, i64 %BH, i64* %RL, i64* %RH) {
entry:
	%tmp1 = zext i64 %AL to i128		; <i128> [#uses=1]
	%tmp23 = zext i64 %AH to i128		; <i128> [#uses=1]
	%tmp4 = shl i128 %tmp23, 64		; <i128> [#uses=1]
	%tmp5 = or i128 %tmp4, %tmp1		; <i128> [#uses=1]
	%tmp67 = zext i64 %BL to i128		; <i128> [#uses=1]
	%tmp89 = zext i64 %BH to i128		; <i128> [#uses=1]
	%tmp11 = shl i128 %tmp89, 64		; <i128> [#uses=1]
	%tmp12 = or i128 %tmp11, %tmp67		; <i128> [#uses=1]
	%tmp15 = add i128 %tmp12, %tmp5		; <i128> [#uses=2]
	%tmp1617 = trunc i128 %tmp15 to i64		; <i64> [#uses=1]
	store i64 %tmp1617, i64* %RL
	%tmp21 = lshr i128 %tmp15, 64		; <i128> [#uses=1]
	%tmp2122 = trunc i128 %tmp21 to i64		; <i64> [#uses=1]
	store i64 %tmp2122, i64* %RH
	ret void
}

define void @test_sub(i64 %AL, i64 %AH, i64 %BL, i64 %BH, i64* %RL, i64* %RH) {
entry:
	%tmp1 = zext i64 %AL to i128		; <i128> [#uses=1]
	%tmp23 = zext i64 %AH to i128		; <i128> [#uses=1]
	%tmp4 = shl i128 %tmp23, 64		; <i128> [#uses=1]
	%tmp5 = or i128 %tmp4, %tmp1		; <i128> [#uses=1]
	%tmp67 = zext i64 %BL to i128		; <i128> [#uses=1]
	%tmp89 = zext i64 %BH to i128		; <i128> [#uses=1]
	%tmp11 = shl i128 %tmp89, 64		; <i128> [#uses=1]
	%tmp12 = or i128 %tmp11, %tmp67		; <i128> [#uses=1]
	%tmp15 = sub i128 %tmp5, %tmp12		; <i128> [#uses=2]
	%tmp1617 = trunc i128 %tmp15 to i64		; <i64> [#uses=1]
	store i64 %tmp1617, i64* %RL
	%tmp21 = lshr i128 %tmp15, 64		; <i128> [#uses=1]
	%tmp2122 = trunc i128 %tmp21 to i64		; <i64> [#uses=1]
	store i64 %tmp2122, i64* %RH
	ret void
}
