xref: /llvm-project/llvm/test/Instrumentation/MemorySanitizer/AArch64/arm64-vshift.ll (revision 38fffa630ee80163dc65e759392ad29798905679)
1*38fffa63SPaul Walker; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
25d0a12d3SThurston Dang;
35d0a12d3SThurston Dang; RUN: opt < %s -passes=msan -S | FileCheck %s
45d0a12d3SThurston Dang;
55d0a12d3SThurston Dang; Forked from llvm/test/CodeGen/AArch64/arm64-vshift.ll
65d0a12d3SThurston Dang
75d0a12d3SThurston Dangtarget datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
85d0a12d3SThurston Dangtarget triple = "aarch64--linux-android9001"
95d0a12d3SThurston Dang
105d0a12d3SThurston Dangdefine <8 x i8> @sqshl8b(ptr %A, ptr %B) nounwind sanitize_memory {
115d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @sqshl8b(
125d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0:[0-9]+]] {
135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
155d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
165d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
17*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1:![0-9]+]]
185d0a12d3SThurston Dang; CHECK:       3:
195d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5:[0-9]+]]
205d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
215d0a12d3SThurston Dang; CHECK:       4:
225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
265d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
275d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
28*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
295d0a12d3SThurston Dang; CHECK:       8:
305d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
315d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
325d0a12d3SThurston Dang; CHECK:       9:
335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[B]], align 8
345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
375d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP12]], align 8
384ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i8> [[_MSLD1]] to i64
394ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
404ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
414ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <8 x i8>
424ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> [[TMP2]])
434ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP17]], [[TMP16]]
445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> [[TMP2]])
455d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
465d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
475d0a12d3SThurston Dang;
485d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
495d0a12d3SThurston Dang  %tmp2 = load <8 x i8>, ptr %B
505d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqshl.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
515d0a12d3SThurston Dang  ret <8 x i8> %tmp3
525d0a12d3SThurston Dang}
535d0a12d3SThurston Dang
545d0a12d3SThurston Dangdefine <4 x i16> @sqshl4h(ptr %A, ptr %B) nounwind sanitize_memory {
555d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @sqshl4h(
565d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
595d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
605d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
61*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
625d0a12d3SThurston Dang; CHECK:       3:
635d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
645d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
655d0a12d3SThurston Dang; CHECK:       4:
665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
705d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
715d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
72*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
735d0a12d3SThurston Dang; CHECK:       8:
745d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
755d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
765d0a12d3SThurston Dang; CHECK:       9:
775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[B]], align 8
785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
815d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP12]], align 8
824ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i16> [[_MSLD1]] to i64
834ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
844ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
854ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <4 x i16>
864ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> [[TMP2]])
874ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP17]], [[TMP16]]
885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> [[TMP2]])
895d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
905d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
915d0a12d3SThurston Dang;
925d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
935d0a12d3SThurston Dang  %tmp2 = load <4 x i16>, ptr %B
945d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqshl.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
955d0a12d3SThurston Dang  ret <4 x i16> %tmp3
965d0a12d3SThurston Dang}
975d0a12d3SThurston Dang
985d0a12d3SThurston Dangdefine <2 x i32> @sqshl2s(ptr %A, ptr %B) nounwind sanitize_memory {
995d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @sqshl2s(
1005d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
1015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
1025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1035d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
1045d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
105*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
1065d0a12d3SThurston Dang; CHECK:       3:
1075d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
1085d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
1095d0a12d3SThurston Dang; CHECK:       4:
1105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
1115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
1125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
1135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
1145d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
1155d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
116*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
1175d0a12d3SThurston Dang; CHECK:       8:
1185d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
1195d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
1205d0a12d3SThurston Dang; CHECK:       9:
1215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[B]], align 8
1225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
1235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
1245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
1255d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP12]], align 8
1264ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i32> [[_MSLD1]] to i64
1274ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
1284ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
1294ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <2 x i32>
1304ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> [[TMP2]])
1314ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP17]], [[TMP16]]
1325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> [[TMP2]])
1335d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
1345d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
1355d0a12d3SThurston Dang;
1365d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
1375d0a12d3SThurston Dang  %tmp2 = load <2 x i32>, ptr %B
1385d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqshl.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
1395d0a12d3SThurston Dang  ret <2 x i32> %tmp3
1405d0a12d3SThurston Dang}
1415d0a12d3SThurston Dang
1425d0a12d3SThurston Dangdefine <1 x i64> @sqshl1d(ptr %A, ptr %B) nounwind sanitize_memory {
1435d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @sqshl1d(
1445d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
1455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
1465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
1475d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
1485d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
149*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
1505d0a12d3SThurston Dang; CHECK:       3:
1515d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
1525d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
1535d0a12d3SThurston Dang; CHECK:       4:
1545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
1555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
1565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
1575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
1585d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP7]], align 8
1595d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
160*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
1615d0a12d3SThurston Dang; CHECK:       8:
1625d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
1635d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
1645d0a12d3SThurston Dang; CHECK:       9:
1655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr [[B]], align 8
1665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
1675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
1685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
1695d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <1 x i64>, ptr [[TMP12]], align 8
1704ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[_MSLD1]] to i64
1714ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
1724ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
1734ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <1 x i64>
1744ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <1 x i64> @llvm.aarch64.neon.sqshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> [[TMP2]])
1754ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP17]], [[TMP16]]
1765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.sqshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> [[TMP2]])
1775d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
1785d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
1795d0a12d3SThurston Dang;
1805d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
1815d0a12d3SThurston Dang  %tmp2 = load <1 x i64>, ptr %B
1825d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.sqshl.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2)
1835d0a12d3SThurston Dang  ret <1 x i64> %tmp3
1845d0a12d3SThurston Dang}
1855d0a12d3SThurston Dang
1865d0a12d3SThurston Dangdefine <1 x i64> @sqshl1d_constant(ptr %A) nounwind sanitize_memory {
1875d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @sqshl1d_constant(
1885d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
1895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
1905d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
1915d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
192*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
1935d0a12d3SThurston Dang; CHECK:       2:
1945d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
1955d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
1965d0a12d3SThurston Dang; CHECK:       3:
1975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
1985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
1995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
2005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
2015d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP6]], align 8
202*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <1 x i64> @llvm.aarch64.neon.sqshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> splat (i64 1))
2034ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP7]], zeroinitializer
204*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.sqshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> splat (i64 1))
2055d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
2065d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
2075d0a12d3SThurston Dang;
2085d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
2095d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.sqshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 1>)
2105d0a12d3SThurston Dang  ret <1 x i64> %tmp3
2115d0a12d3SThurston Dang}
2125d0a12d3SThurston Dang
2135d0a12d3SThurston Dangdefine i64 @sqshl_scalar(ptr %A, ptr %B) nounwind sanitize_memory {
2145d0a12d3SThurston Dang; CHECK-LABEL: define i64 @sqshl_scalar(
2155d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
2165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
2175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2185d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
2195d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
220*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
2215d0a12d3SThurston Dang; CHECK:       3:
2225d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
2235d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
2245d0a12d3SThurston Dang; CHECK:       4:
2255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
2265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
2275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
2285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
2295d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP7]], align 8
2305d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
231*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
2325d0a12d3SThurston Dang; CHECK:       8:
2335d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
2345d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
2355d0a12d3SThurston Dang; CHECK:       9:
2365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr [[B]], align 8
2375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
2385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
2395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
2405d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load i64, ptr [[TMP12]], align 8
2414ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[_MSLD1]], 0
2424ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
2434ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = call i64 @llvm.aarch64.neon.sqshl.i64(i64 [[_MSLD]], i64 [[TMP2]])
2444ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP15]], [[TMP14]]
2455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.sqshl.i64(i64 [[TMP1]], i64 [[TMP2]])
2465d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
2475d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
2485d0a12d3SThurston Dang;
2495d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
2505d0a12d3SThurston Dang  %tmp2 = load i64, ptr %B
2515d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.sqshl.i64(i64 %tmp1, i64 %tmp2)
2525d0a12d3SThurston Dang  ret i64 %tmp3
2535d0a12d3SThurston Dang}
2545d0a12d3SThurston Dang
2555d0a12d3SThurston Dangdefine i64 @sqshl_scalar_constant(ptr %A) nounwind sanitize_memory {
2565d0a12d3SThurston Dang; CHECK-LABEL: define i64 @sqshl_scalar_constant(
2575d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
2585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
2595d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
2605d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
261*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
2625d0a12d3SThurston Dang; CHECK:       2:
2635d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
2645d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
2655d0a12d3SThurston Dang; CHECK:       3:
2665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
2675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
2685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
2695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
2705d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP6]], align 8
2714ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.sqshl.i64(i64 [[_MSLD]], i64 1)
2724ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP7]], 0
2735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.sqshl.i64(i64 [[TMP1]], i64 1)
2745d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
2755d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
2765d0a12d3SThurston Dang;
2775d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
2785d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.sqshl.i64(i64 %tmp1, i64 1)
2795d0a12d3SThurston Dang  ret i64 %tmp3
2805d0a12d3SThurston Dang}
2815d0a12d3SThurston Dang
2825d0a12d3SThurston Dangdefine <8 x i8> @uqshl8b(ptr %A, ptr %B) nounwind sanitize_memory {
2835d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @uqshl8b(
2845d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
2855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
2865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
2875d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
2885d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
289*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
2905d0a12d3SThurston Dang; CHECK:       3:
2915d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
2925d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
2935d0a12d3SThurston Dang; CHECK:       4:
2945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
2955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
2965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
2975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
2985d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
2995d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
300*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
3015d0a12d3SThurston Dang; CHECK:       8:
3025d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
3035d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
3045d0a12d3SThurston Dang; CHECK:       9:
3055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[B]], align 8
3065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
3075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
3085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
3095d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP12]], align 8
3104ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i8> [[_MSLD1]] to i64
3114ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
3124ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
3134ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <8 x i8>
3144ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> [[TMP2]])
3154ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP17]], [[TMP16]]
3165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> [[TMP2]])
3175d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
3185d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
3195d0a12d3SThurston Dang;
3205d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
3215d0a12d3SThurston Dang  %tmp2 = load <8 x i8>, ptr %B
3225d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.uqshl.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
3235d0a12d3SThurston Dang  ret <8 x i8> %tmp3
3245d0a12d3SThurston Dang}
3255d0a12d3SThurston Dang
3265d0a12d3SThurston Dangdefine <4 x i16> @uqshl4h(ptr %A, ptr %B) nounwind sanitize_memory {
3275d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @uqshl4h(
3285d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
3295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
3305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3315d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
3325d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
333*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
3345d0a12d3SThurston Dang; CHECK:       3:
3355d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
3365d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
3375d0a12d3SThurston Dang; CHECK:       4:
3385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
3395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
3405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
3415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
3425d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
3435d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
344*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
3455d0a12d3SThurston Dang; CHECK:       8:
3465d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
3475d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
3485d0a12d3SThurston Dang; CHECK:       9:
3495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[B]], align 8
3505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
3515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
3525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
3535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP12]], align 8
3544ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i16> [[_MSLD1]] to i64
3554ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
3564ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
3574ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <4 x i16>
3584ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> [[TMP2]])
3594ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP17]], [[TMP16]]
3605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> [[TMP2]])
3615d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
3625d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
3635d0a12d3SThurston Dang;
3645d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
3655d0a12d3SThurston Dang  %tmp2 = load <4 x i16>, ptr %B
3665d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.uqshl.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
3675d0a12d3SThurston Dang  ret <4 x i16> %tmp3
3685d0a12d3SThurston Dang}
3695d0a12d3SThurston Dang
3705d0a12d3SThurston Dangdefine <2 x i32> @uqshl2s(ptr %A, ptr %B) nounwind sanitize_memory {
3715d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @uqshl2s(
3725d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
3735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
3745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
3755d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
3765d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
377*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
3785d0a12d3SThurston Dang; CHECK:       3:
3795d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
3805d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
3815d0a12d3SThurston Dang; CHECK:       4:
3825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
3835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
3845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
3855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
3865d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
3875d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
388*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
3895d0a12d3SThurston Dang; CHECK:       8:
3905d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
3915d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
3925d0a12d3SThurston Dang; CHECK:       9:
3935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[B]], align 8
3945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
3955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
3965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
3975d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP12]], align 8
3984ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i32> [[_MSLD1]] to i64
3994ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
4004ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
4014ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <2 x i32>
4024ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> [[TMP2]])
4034ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP17]], [[TMP16]]
4045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> [[TMP2]])
4055d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
4065d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
4075d0a12d3SThurston Dang;
4085d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
4095d0a12d3SThurston Dang  %tmp2 = load <2 x i32>, ptr %B
4105d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.uqshl.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
4115d0a12d3SThurston Dang  ret <2 x i32> %tmp3
4125d0a12d3SThurston Dang}
4135d0a12d3SThurston Dang
4145d0a12d3SThurston Dangdefine <16 x i8> @sqshl16b(ptr %A, ptr %B) nounwind sanitize_memory {
4155d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @sqshl16b(
4165d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
4175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
4185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
4195d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
4205d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
421*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
4225d0a12d3SThurston Dang; CHECK:       3:
4235d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
4245d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
4255d0a12d3SThurston Dang; CHECK:       4:
4265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
4275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
4285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
4295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
4305d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
4315d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
432*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
4335d0a12d3SThurston Dang; CHECK:       8:
4345d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
4355d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
4365d0a12d3SThurston Dang; CHECK:       9:
4375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[B]], align 16
4385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
4395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
4405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
4415d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP12]], align 16
4424ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <16 x i8> [[_MSLD1]] to i128
4434ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
4444ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
4454ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
4464ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <16 x i8>
4474ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> [[TMP2]])
4484ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP18]], [[TMP17]]
4495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> [[TMP2]])
4505d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
4515d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
4525d0a12d3SThurston Dang;
4535d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
4545d0a12d3SThurston Dang  %tmp2 = load <16 x i8>, ptr %B
4555d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.sqshl.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
4565d0a12d3SThurston Dang  ret <16 x i8> %tmp3
4575d0a12d3SThurston Dang}
4585d0a12d3SThurston Dang
4595d0a12d3SThurston Dangdefine <8 x i16> @sqshl8h(ptr %A, ptr %B) nounwind sanitize_memory {
4605d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @sqshl8h(
4615d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
4625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
4635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
4645d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
4655d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
466*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
4675d0a12d3SThurston Dang; CHECK:       3:
4685d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
4695d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
4705d0a12d3SThurston Dang; CHECK:       4:
4715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
4725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
4735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
4745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
4755d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
4765d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
477*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
4785d0a12d3SThurston Dang; CHECK:       8:
4795d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
4805d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
4815d0a12d3SThurston Dang; CHECK:       9:
4825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[B]], align 16
4835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
4845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
4855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
4865d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
4874ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i16> [[_MSLD1]] to i128
4884ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
4894ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
4904ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
4914ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <8 x i16>
4924ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> [[TMP2]])
4934ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP18]], [[TMP17]]
4945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> [[TMP2]])
4955d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
4965d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
4975d0a12d3SThurston Dang;
4985d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
4995d0a12d3SThurston Dang  %tmp2 = load <8 x i16>, ptr %B
5005d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.sqshl.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
5015d0a12d3SThurston Dang  ret <8 x i16> %tmp3
5025d0a12d3SThurston Dang}
5035d0a12d3SThurston Dang
5045d0a12d3SThurston Dangdefine <4 x i32> @sqshl4s(ptr %A, ptr %B) nounwind sanitize_memory {
5055d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @sqshl4s(
5065d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
5075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
5085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
5095d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
5105d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
511*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
5125d0a12d3SThurston Dang; CHECK:       3:
5135d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
5145d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
5155d0a12d3SThurston Dang; CHECK:       4:
5165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
5175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
5185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
5195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
5205d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
5215d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
522*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
5235d0a12d3SThurston Dang; CHECK:       8:
5245d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
5255d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
5265d0a12d3SThurston Dang; CHECK:       9:
5275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[B]], align 16
5285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
5295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
5305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
5315d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
5324ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i32> [[_MSLD1]] to i128
5334ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
5344ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
5354ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
5364ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <4 x i32>
5374ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> [[TMP2]])
5384ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP18]], [[TMP17]]
5395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> [[TMP2]])
5405d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
5415d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
5425d0a12d3SThurston Dang;
5435d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
5445d0a12d3SThurston Dang  %tmp2 = load <4 x i32>, ptr %B
5455d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.sqshl.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
5465d0a12d3SThurston Dang  ret <4 x i32> %tmp3
5475d0a12d3SThurston Dang}
5485d0a12d3SThurston Dang
5495d0a12d3SThurston Dangdefine <2 x i64> @sqshl2d(ptr %A, ptr %B) nounwind sanitize_memory {
5505d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @sqshl2d(
5515d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
5525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
5535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
5545d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
5555d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
556*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
5575d0a12d3SThurston Dang; CHECK:       3:
5585d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
5595d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
5605d0a12d3SThurston Dang; CHECK:       4:
5615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
5625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
5635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
5645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
5655d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
5665d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
567*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
5685d0a12d3SThurston Dang; CHECK:       8:
5695d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
5705d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
5715d0a12d3SThurston Dang; CHECK:       9:
5725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr [[B]], align 16
5735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
5745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
5755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
5765d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
5774ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i64> [[_MSLD1]] to i128
5784ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
5794ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
5804ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
5814ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <2 x i64>
5824ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> [[TMP2]])
5834ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP18]], [[TMP17]]
5845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> [[TMP2]])
5855d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
5865d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
5875d0a12d3SThurston Dang;
5885d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
5895d0a12d3SThurston Dang  %tmp2 = load <2 x i64>, ptr %B
5905d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2)
5915d0a12d3SThurston Dang  ret <2 x i64> %tmp3
5925d0a12d3SThurston Dang}
5935d0a12d3SThurston Dang
5945d0a12d3SThurston Dangdefine <16 x i8> @uqshl16b(ptr %A, ptr %B) nounwind sanitize_memory {
5955d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @uqshl16b(
5965d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
5975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
5985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
5995d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
6005d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
601*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
6025d0a12d3SThurston Dang; CHECK:       3:
6035d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
6045d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
6055d0a12d3SThurston Dang; CHECK:       4:
6065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
6075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
6085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
6095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
6105d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
6115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
612*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
6135d0a12d3SThurston Dang; CHECK:       8:
6145d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
6155d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
6165d0a12d3SThurston Dang; CHECK:       9:
6175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[B]], align 16
6185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
6195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
6205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
6215d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP12]], align 16
6224ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <16 x i8> [[_MSLD1]] to i128
6234ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
6244ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
6254ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
6264ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <16 x i8>
6274ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <16 x i8> @llvm.aarch64.neon.uqshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> [[TMP2]])
6284ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP18]], [[TMP17]]
6295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.uqshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> [[TMP2]])
6305d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
6315d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
6325d0a12d3SThurston Dang;
6335d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
6345d0a12d3SThurston Dang  %tmp2 = load <16 x i8>, ptr %B
6355d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.uqshl.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
6365d0a12d3SThurston Dang  ret <16 x i8> %tmp3
6375d0a12d3SThurston Dang}
6385d0a12d3SThurston Dang
6395d0a12d3SThurston Dangdefine <8 x i16> @uqshl8h(ptr %A, ptr %B) nounwind sanitize_memory {
6405d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @uqshl8h(
6415d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
6425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
6435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
6445d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
6455d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
646*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
6475d0a12d3SThurston Dang; CHECK:       3:
6485d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
6495d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
6505d0a12d3SThurston Dang; CHECK:       4:
6515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
6525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
6535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
6545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
6555d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
6565d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
657*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
6585d0a12d3SThurston Dang; CHECK:       8:
6595d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
6605d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
6615d0a12d3SThurston Dang; CHECK:       9:
6625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[B]], align 16
6635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
6645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
6655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
6665d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
6674ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i16> [[_MSLD1]] to i128
6684ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
6694ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
6704ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
6714ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <8 x i16>
6724ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <8 x i16> @llvm.aarch64.neon.uqshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> [[TMP2]])
6734ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP18]], [[TMP17]]
6745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.uqshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> [[TMP2]])
6755d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
6765d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
6775d0a12d3SThurston Dang;
6785d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
6795d0a12d3SThurston Dang  %tmp2 = load <8 x i16>, ptr %B
6805d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.uqshl.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
6815d0a12d3SThurston Dang  ret <8 x i16> %tmp3
6825d0a12d3SThurston Dang}
6835d0a12d3SThurston Dang
6845d0a12d3SThurston Dangdefine <4 x i32> @uqshl4s(ptr %A, ptr %B) nounwind sanitize_memory {
6855d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @uqshl4s(
6865d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
6875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
6885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
6895d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
6905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
691*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
6925d0a12d3SThurston Dang; CHECK:       3:
6935d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
6945d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
6955d0a12d3SThurston Dang; CHECK:       4:
6965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
6975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
6985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
6995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
7005d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
7015d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
702*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
7035d0a12d3SThurston Dang; CHECK:       8:
7045d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
7055d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
7065d0a12d3SThurston Dang; CHECK:       9:
7075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[B]], align 16
7085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
7095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
7105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
7115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
7124ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i32> [[_MSLD1]] to i128
7134ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
7144ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
7154ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
7164ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <4 x i32>
7174ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <4 x i32> @llvm.aarch64.neon.uqshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> [[TMP2]])
7184ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP18]], [[TMP17]]
7195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.uqshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> [[TMP2]])
7205d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
7215d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
7225d0a12d3SThurston Dang;
7235d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
7245d0a12d3SThurston Dang  %tmp2 = load <4 x i32>, ptr %B
7255d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.uqshl.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
7265d0a12d3SThurston Dang  ret <4 x i32> %tmp3
7275d0a12d3SThurston Dang}
7285d0a12d3SThurston Dang
7295d0a12d3SThurston Dangdefine <2 x i64> @uqshl2d(ptr %A, ptr %B) nounwind sanitize_memory {
7305d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @uqshl2d(
7315d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
7325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
7335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
7345d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
7355d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
736*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
7375d0a12d3SThurston Dang; CHECK:       3:
7385d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
7395d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
7405d0a12d3SThurston Dang; CHECK:       4:
7415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
7425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
7435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
7445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
7455d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
7465d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
747*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
7485d0a12d3SThurston Dang; CHECK:       8:
7495d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
7505d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
7515d0a12d3SThurston Dang; CHECK:       9:
7525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr [[B]], align 16
7535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
7545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
7555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
7565d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
7574ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i64> [[_MSLD1]] to i128
7584ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
7594ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
7604ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
7614ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <2 x i64>
7624ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> [[TMP2]])
7634ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP18]], [[TMP17]]
7645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> [[TMP2]])
7655d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
7665d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
7675d0a12d3SThurston Dang;
7685d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
7695d0a12d3SThurston Dang  %tmp2 = load <2 x i64>, ptr %B
7705d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2)
7715d0a12d3SThurston Dang  ret <2 x i64> %tmp3
7725d0a12d3SThurston Dang}
7735d0a12d3SThurston Dang
7745d0a12d3SThurston Dangdefine <1 x i64> @uqshl1d(ptr %A, ptr %B) nounwind sanitize_memory {
7755d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @uqshl1d(
7765d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
7775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
7785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
7795d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
7805d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
781*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
7825d0a12d3SThurston Dang; CHECK:       3:
7835d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
7845d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
7855d0a12d3SThurston Dang; CHECK:       4:
7865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
7875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
7885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
7895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
7905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP7]], align 8
7915d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
792*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
7935d0a12d3SThurston Dang; CHECK:       8:
7945d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
7955d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
7965d0a12d3SThurston Dang; CHECK:       9:
7975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr [[B]], align 8
7985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
7995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
8005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
8015d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <1 x i64>, ptr [[TMP12]], align 8
8024ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[_MSLD1]] to i64
8034ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
8044ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
8054ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <1 x i64>
8064ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <1 x i64> @llvm.aarch64.neon.uqshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> [[TMP2]])
8074ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP17]], [[TMP16]]
8085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.uqshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> [[TMP2]])
8095d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
8105d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
8115d0a12d3SThurston Dang;
8125d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
8135d0a12d3SThurston Dang  %tmp2 = load <1 x i64>, ptr %B
8145d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.uqshl.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2)
8155d0a12d3SThurston Dang  ret <1 x i64> %tmp3
8165d0a12d3SThurston Dang}
8175d0a12d3SThurston Dang
8185d0a12d3SThurston Dangdefine <1 x i64> @uqshl1d_constant(ptr %A) nounwind sanitize_memory {
8195d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @uqshl1d_constant(
8205d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
8215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
8225d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
8235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
824*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
8255d0a12d3SThurston Dang; CHECK:       2:
8265d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
8275d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
8285d0a12d3SThurston Dang; CHECK:       3:
8295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
8305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
8315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
8325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
8335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP6]], align 8
834*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <1 x i64> @llvm.aarch64.neon.uqshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> splat (i64 1))
8354ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP7]], zeroinitializer
836*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.uqshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> splat (i64 1))
8375d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
8385d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
8395d0a12d3SThurston Dang;
8405d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
8415d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.uqshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 1>)
8425d0a12d3SThurston Dang  ret <1 x i64> %tmp3
8435d0a12d3SThurston Dang}
8445d0a12d3SThurston Dang
8455d0a12d3SThurston Dangdefine i64 @uqshl_scalar(ptr %A, ptr %B) nounwind sanitize_memory {
8465d0a12d3SThurston Dang; CHECK-LABEL: define i64 @uqshl_scalar(
8475d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
8485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
8495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
8505d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
8515d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
852*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
8535d0a12d3SThurston Dang; CHECK:       3:
8545d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
8555d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
8565d0a12d3SThurston Dang; CHECK:       4:
8575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
8585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
8595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
8605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
8615d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP7]], align 8
8625d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
863*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
8645d0a12d3SThurston Dang; CHECK:       8:
8655d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
8665d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
8675d0a12d3SThurston Dang; CHECK:       9:
8685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr [[B]], align 8
8695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
8705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
8715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
8725d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load i64, ptr [[TMP12]], align 8
8734ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[_MSLD1]], 0
8744ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
8754ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = call i64 @llvm.aarch64.neon.uqshl.i64(i64 [[_MSLD]], i64 [[TMP2]])
8764ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP15]], [[TMP14]]
8775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.uqshl.i64(i64 [[TMP1]], i64 [[TMP2]])
8785d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
8795d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
8805d0a12d3SThurston Dang;
8815d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
8825d0a12d3SThurston Dang  %tmp2 = load i64, ptr %B
8835d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.uqshl.i64(i64 %tmp1, i64 %tmp2)
8845d0a12d3SThurston Dang  ret i64 %tmp3
8855d0a12d3SThurston Dang}
8865d0a12d3SThurston Dang
8875d0a12d3SThurston Dangdefine i64 @uqshl_scalar_constant(ptr %A) nounwind sanitize_memory {
8885d0a12d3SThurston Dang; CHECK-LABEL: define i64 @uqshl_scalar_constant(
8895d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
8905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
8915d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
8925d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
893*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
8945d0a12d3SThurston Dang; CHECK:       2:
8955d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
8965d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
8975d0a12d3SThurston Dang; CHECK:       3:
8985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
8995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
9005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
9015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
9025d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP6]], align 8
9034ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.uqshl.i64(i64 [[_MSLD]], i64 1)
9044ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP7]], 0
9055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.uqshl.i64(i64 [[TMP1]], i64 1)
9065d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
9075d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
9085d0a12d3SThurston Dang;
9095d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
9105d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.uqshl.i64(i64 %tmp1, i64 1)
9115d0a12d3SThurston Dang  ret i64 %tmp3
9125d0a12d3SThurston Dang}
9135d0a12d3SThurston Dang
9145d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.sqshl.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
9155d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.sqshl.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
9165d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.sqshl.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
9175d0a12d3SThurston Dangdeclare <1 x i64> @llvm.aarch64.neon.sqshl.v1i64(<1 x i64>, <1 x i64>) nounwind readnone
9185d0a12d3SThurston Dangdeclare i64 @llvm.aarch64.neon.sqshl.i64(i64, i64) nounwind readnone
9195d0a12d3SThurston Dang
9205d0a12d3SThurston Dang
9215d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.uqshl.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
9225d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.uqshl.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
9235d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.uqshl.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
9245d0a12d3SThurston Dangdeclare <1 x i64> @llvm.aarch64.neon.uqshl.v1i64(<1 x i64>, <1 x i64>) nounwind readnone
9255d0a12d3SThurston Dangdeclare i64 @llvm.aarch64.neon.uqshl.i64(i64, i64) nounwind readnone
9265d0a12d3SThurston Dang
9275d0a12d3SThurston Dangdeclare <16 x i8> @llvm.aarch64.neon.sqshl.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
9285d0a12d3SThurston Dangdeclare <8 x i16> @llvm.aarch64.neon.sqshl.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
9295d0a12d3SThurston Dangdeclare <4 x i32> @llvm.aarch64.neon.sqshl.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
9305d0a12d3SThurston Dangdeclare <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64>, <2 x i64>) nounwind readnone
9315d0a12d3SThurston Dang
9325d0a12d3SThurston Dangdeclare <16 x i8> @llvm.aarch64.neon.uqshl.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
9335d0a12d3SThurston Dangdeclare <8 x i16> @llvm.aarch64.neon.uqshl.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
9345d0a12d3SThurston Dangdeclare <4 x i32> @llvm.aarch64.neon.uqshl.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
9355d0a12d3SThurston Dangdeclare <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64>, <2 x i64>) nounwind readnone
9365d0a12d3SThurston Dang
9375d0a12d3SThurston Dangdefine <8 x i8> @srshl8b(ptr %A, ptr %B) nounwind sanitize_memory {
9385d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @srshl8b(
9395d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
9405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
9415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
9425d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
9435d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
944*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
9455d0a12d3SThurston Dang; CHECK:       3:
9465d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
9475d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
9485d0a12d3SThurston Dang; CHECK:       4:
9495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
9505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
9515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
9525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
9535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
9545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
955*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
9565d0a12d3SThurston Dang; CHECK:       8:
9575d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
9585d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
9595d0a12d3SThurston Dang; CHECK:       9:
9605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[B]], align 8
9615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
9625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
9635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
9645d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP12]], align 8
9654ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i8> [[_MSLD1]] to i64
9664ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
9674ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
9684ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <8 x i8>
9694ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <8 x i8> @llvm.aarch64.neon.srshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> [[TMP2]])
9704ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP17]], [[TMP16]]
9715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.srshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> [[TMP2]])
9725d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
9735d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
9745d0a12d3SThurston Dang;
9755d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
9765d0a12d3SThurston Dang  %tmp2 = load <8 x i8>, ptr %B
9775d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.srshl.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
9785d0a12d3SThurston Dang  ret <8 x i8> %tmp3
9795d0a12d3SThurston Dang}
9805d0a12d3SThurston Dang
9815d0a12d3SThurston Dangdefine <4 x i16> @srshl4h(ptr %A, ptr %B) nounwind sanitize_memory {
9825d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @srshl4h(
9835d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
9845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
9855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
9865d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
9875d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
988*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
9895d0a12d3SThurston Dang; CHECK:       3:
9905d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
9915d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
9925d0a12d3SThurston Dang; CHECK:       4:
9935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
9945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
9955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
9965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
9975d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
9985d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
999*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
10005d0a12d3SThurston Dang; CHECK:       8:
10015d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
10025d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
10035d0a12d3SThurston Dang; CHECK:       9:
10045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[B]], align 8
10055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
10065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
10075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
10085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP12]], align 8
10094ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i16> [[_MSLD1]] to i64
10104ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
10114ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
10124ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <4 x i16>
10134ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> [[TMP2]])
10144ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP17]], [[TMP16]]
10155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> [[TMP2]])
10165d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
10175d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
10185d0a12d3SThurston Dang;
10195d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
10205d0a12d3SThurston Dang  %tmp2 = load <4 x i16>, ptr %B
10215d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
10225d0a12d3SThurston Dang  ret <4 x i16> %tmp3
10235d0a12d3SThurston Dang}
10245d0a12d3SThurston Dang
10255d0a12d3SThurston Dangdefine <2 x i32> @srshl2s(ptr %A, ptr %B) nounwind sanitize_memory {
10265d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @srshl2s(
10275d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
10285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
10295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
10305d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
10315d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1032*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
10335d0a12d3SThurston Dang; CHECK:       3:
10345d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
10355d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
10365d0a12d3SThurston Dang; CHECK:       4:
10375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
10385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
10395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
10405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
10415d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
10425d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1043*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
10445d0a12d3SThurston Dang; CHECK:       8:
10455d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
10465d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
10475d0a12d3SThurston Dang; CHECK:       9:
10485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[B]], align 8
10495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
10505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
10515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
10525d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP12]], align 8
10534ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i32> [[_MSLD1]] to i64
10544ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
10554ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
10564ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <2 x i32>
10574ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> [[TMP2]])
10584ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP17]], [[TMP16]]
10595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> [[TMP2]])
10605d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
10615d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
10625d0a12d3SThurston Dang;
10635d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
10645d0a12d3SThurston Dang  %tmp2 = load <2 x i32>, ptr %B
10655d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
10665d0a12d3SThurston Dang  ret <2 x i32> %tmp3
10675d0a12d3SThurston Dang}
10685d0a12d3SThurston Dang
10695d0a12d3SThurston Dangdefine <1 x i64> @srshl1d(ptr %A, ptr %B) nounwind sanitize_memory {
10705d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @srshl1d(
10715d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
10725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
10735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
10745d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
10755d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1076*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
10775d0a12d3SThurston Dang; CHECK:       3:
10785d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
10795d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
10805d0a12d3SThurston Dang; CHECK:       4:
10815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
10825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
10835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
10845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
10855d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP7]], align 8
10865d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1087*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
10885d0a12d3SThurston Dang; CHECK:       8:
10895d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
10905d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
10915d0a12d3SThurston Dang; CHECK:       9:
10925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr [[B]], align 8
10935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
10945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
10955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
10965d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <1 x i64>, ptr [[TMP12]], align 8
10974ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[_MSLD1]] to i64
10984ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
10994ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
11004ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <1 x i64>
11014ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> [[TMP2]])
11024ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP17]], [[TMP16]]
11035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> [[TMP2]])
11045d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
11055d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
11065d0a12d3SThurston Dang;
11075d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
11085d0a12d3SThurston Dang  %tmp2 = load <1 x i64>, ptr %B
11095d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2)
11105d0a12d3SThurston Dang  ret <1 x i64> %tmp3
11115d0a12d3SThurston Dang}
11125d0a12d3SThurston Dang
11135d0a12d3SThurston Dangdefine <1 x i64> @srshl1d_constant(ptr %A) nounwind sanitize_memory {
11145d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @srshl1d_constant(
11155d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
11165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
11175d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
11185d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1119*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
11205d0a12d3SThurston Dang; CHECK:       2:
11215d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
11225d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
11235d0a12d3SThurston Dang; CHECK:       3:
11245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
11255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
11265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
11275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
11285d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP6]], align 8
1129*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> splat (i64 1))
11304ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP7]], zeroinitializer
1131*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> splat (i64 1))
11325d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
11335d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
11345d0a12d3SThurston Dang;
11355d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
11365d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 1>)
11375d0a12d3SThurston Dang  ret <1 x i64> %tmp3
11385d0a12d3SThurston Dang}
11395d0a12d3SThurston Dang
11405d0a12d3SThurston Dangdefine i64 @srshl_scalar(ptr %A, ptr %B) nounwind sanitize_memory {
11415d0a12d3SThurston Dang; CHECK-LABEL: define i64 @srshl_scalar(
11425d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
11435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
11445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
11455d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
11465d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1147*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
11485d0a12d3SThurston Dang; CHECK:       3:
11495d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
11505d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
11515d0a12d3SThurston Dang; CHECK:       4:
11525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
11535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
11545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
11555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
11565d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP7]], align 8
11575d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1158*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
11595d0a12d3SThurston Dang; CHECK:       8:
11605d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
11615d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
11625d0a12d3SThurston Dang; CHECK:       9:
11635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr [[B]], align 8
11645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
11655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
11665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
11675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load i64, ptr [[TMP12]], align 8
11684ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[_MSLD1]], 0
11694ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
11704ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = call i64 @llvm.aarch64.neon.srshl.i64(i64 [[_MSLD]], i64 [[TMP2]])
11714ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP15]], [[TMP14]]
11725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.srshl.i64(i64 [[TMP1]], i64 [[TMP2]])
11735d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
11745d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
11755d0a12d3SThurston Dang;
11765d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
11775d0a12d3SThurston Dang  %tmp2 = load i64, ptr %B
11785d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.srshl.i64(i64 %tmp1, i64 %tmp2)
11795d0a12d3SThurston Dang  ret i64 %tmp3
11805d0a12d3SThurston Dang}
11815d0a12d3SThurston Dang
11825d0a12d3SThurston Dangdefine i64 @srshl_scalar_constant(ptr %A) nounwind sanitize_memory {
11835d0a12d3SThurston Dang; CHECK-LABEL: define i64 @srshl_scalar_constant(
11845d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
11855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
11865d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
11875d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1188*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
11895d0a12d3SThurston Dang; CHECK:       2:
11905d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
11915d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
11925d0a12d3SThurston Dang; CHECK:       3:
11935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
11945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
11955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
11965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
11975d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP6]], align 8
11984ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.srshl.i64(i64 [[_MSLD]], i64 1)
11994ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP7]], 0
12005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.srshl.i64(i64 [[TMP1]], i64 1)
12015d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
12025d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
12035d0a12d3SThurston Dang;
12045d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
12055d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.srshl.i64(i64 %tmp1, i64 1)
12065d0a12d3SThurston Dang  ret i64 %tmp3
12075d0a12d3SThurston Dang}
12085d0a12d3SThurston Dang
12095d0a12d3SThurston Dangdefine <8 x i8> @urshl8b(ptr %A, ptr %B) nounwind sanitize_memory {
12105d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @urshl8b(
12115d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
12125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
12135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
12145d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
12155d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1216*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
12175d0a12d3SThurston Dang; CHECK:       3:
12185d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
12195d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
12205d0a12d3SThurston Dang; CHECK:       4:
12215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
12225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
12235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
12245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
12255d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
12265d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1227*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
12285d0a12d3SThurston Dang; CHECK:       8:
12295d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
12305d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
12315d0a12d3SThurston Dang; CHECK:       9:
12325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[B]], align 8
12335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
12345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
12355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
12365d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP12]], align 8
12374ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i8> [[_MSLD1]] to i64
12384ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
12394ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
12404ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <8 x i8>
12414ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <8 x i8> @llvm.aarch64.neon.urshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> [[TMP2]])
12424ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP17]], [[TMP16]]
12435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.urshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> [[TMP2]])
12445d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
12455d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
12465d0a12d3SThurston Dang;
12475d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
12485d0a12d3SThurston Dang  %tmp2 = load <8 x i8>, ptr %B
12495d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.urshl.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
12505d0a12d3SThurston Dang  ret <8 x i8> %tmp3
12515d0a12d3SThurston Dang}
12525d0a12d3SThurston Dang
12535d0a12d3SThurston Dangdefine <4 x i16> @urshl4h(ptr %A, ptr %B) nounwind sanitize_memory {
12545d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @urshl4h(
12555d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
12565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
12575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
12585d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
12595d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1260*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
12615d0a12d3SThurston Dang; CHECK:       3:
12625d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
12635d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
12645d0a12d3SThurston Dang; CHECK:       4:
12655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
12665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
12675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
12685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
12695d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
12705d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1271*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
12725d0a12d3SThurston Dang; CHECK:       8:
12735d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
12745d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
12755d0a12d3SThurston Dang; CHECK:       9:
12765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[B]], align 8
12775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
12785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
12795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
12805d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP12]], align 8
12814ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i16> [[_MSLD1]] to i64
12824ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
12834ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
12844ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <4 x i16>
12854ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> [[TMP2]])
12864ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP17]], [[TMP16]]
12875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> [[TMP2]])
12885d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
12895d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
12905d0a12d3SThurston Dang;
12915d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
12925d0a12d3SThurston Dang  %tmp2 = load <4 x i16>, ptr %B
12935d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
12945d0a12d3SThurston Dang  ret <4 x i16> %tmp3
12955d0a12d3SThurston Dang}
12965d0a12d3SThurston Dang
12975d0a12d3SThurston Dangdefine <2 x i32> @urshl2s(ptr %A, ptr %B) nounwind sanitize_memory {
12985d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @urshl2s(
12995d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
13005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
13015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
13025d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
13035d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1304*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
13055d0a12d3SThurston Dang; CHECK:       3:
13065d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
13075d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
13085d0a12d3SThurston Dang; CHECK:       4:
13095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
13105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
13115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
13125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
13135d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
13145d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1315*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
13165d0a12d3SThurston Dang; CHECK:       8:
13175d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
13185d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
13195d0a12d3SThurston Dang; CHECK:       9:
13205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[B]], align 8
13215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
13225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
13235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
13245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP12]], align 8
13254ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i32> [[_MSLD1]] to i64
13264ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
13274ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
13284ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <2 x i32>
13294ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> [[TMP2]])
13304ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP17]], [[TMP16]]
13315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> [[TMP2]])
13325d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
13335d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
13345d0a12d3SThurston Dang;
13355d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
13365d0a12d3SThurston Dang  %tmp2 = load <2 x i32>, ptr %B
13375d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
13385d0a12d3SThurston Dang  ret <2 x i32> %tmp3
13395d0a12d3SThurston Dang}
13405d0a12d3SThurston Dang
13415d0a12d3SThurston Dangdefine <1 x i64> @urshl1d(ptr %A, ptr %B) nounwind sanitize_memory {
13425d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @urshl1d(
13435d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
13445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
13455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
13465d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
13475d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1348*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
13495d0a12d3SThurston Dang; CHECK:       3:
13505d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
13515d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
13525d0a12d3SThurston Dang; CHECK:       4:
13535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
13545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
13555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
13565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
13575d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP7]], align 8
13585d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1359*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
13605d0a12d3SThurston Dang; CHECK:       8:
13615d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
13625d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
13635d0a12d3SThurston Dang; CHECK:       9:
13645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr [[B]], align 8
13655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
13665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
13675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
13685d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <1 x i64>, ptr [[TMP12]], align 8
13694ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[_MSLD1]] to i64
13704ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
13714ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
13724ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <1 x i64>
13734ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> [[TMP2]])
13744ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP17]], [[TMP16]]
13755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> [[TMP2]])
13765d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
13775d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
13785d0a12d3SThurston Dang;
13795d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
13805d0a12d3SThurston Dang  %tmp2 = load <1 x i64>, ptr %B
13815d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2)
13825d0a12d3SThurston Dang  ret <1 x i64> %tmp3
13835d0a12d3SThurston Dang}
13845d0a12d3SThurston Dang
13855d0a12d3SThurston Dangdefine <1 x i64> @urshl1d_constant(ptr %A) nounwind sanitize_memory {
13865d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @urshl1d_constant(
13875d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
13885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
13895d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
13905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1391*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
13925d0a12d3SThurston Dang; CHECK:       2:
13935d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
13945d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
13955d0a12d3SThurston Dang; CHECK:       3:
13965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
13975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
13985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
13995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
14005d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP6]], align 8
1401*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> splat (i64 1))
14024ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP7]], zeroinitializer
1403*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> splat (i64 1))
14045d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
14055d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
14065d0a12d3SThurston Dang;
14075d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
14085d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 1>)
14095d0a12d3SThurston Dang  ret <1 x i64> %tmp3
14105d0a12d3SThurston Dang}
14115d0a12d3SThurston Dang
14125d0a12d3SThurston Dangdefine i64 @urshl_scalar(ptr %A, ptr %B) nounwind sanitize_memory {
14135d0a12d3SThurston Dang; CHECK-LABEL: define i64 @urshl_scalar(
14145d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
14155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
14165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
14175d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
14185d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1419*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
14205d0a12d3SThurston Dang; CHECK:       3:
14215d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
14225d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
14235d0a12d3SThurston Dang; CHECK:       4:
14245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
14255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
14265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
14275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
14285d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP7]], align 8
14295d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1430*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
14315d0a12d3SThurston Dang; CHECK:       8:
14325d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
14335d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
14345d0a12d3SThurston Dang; CHECK:       9:
14355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr [[B]], align 8
14365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
14375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
14385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
14395d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load i64, ptr [[TMP12]], align 8
14404ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[_MSLD1]], 0
14414ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
14424ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = call i64 @llvm.aarch64.neon.urshl.i64(i64 [[_MSLD]], i64 [[TMP2]])
14434ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP15]], [[TMP14]]
14445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.urshl.i64(i64 [[TMP1]], i64 [[TMP2]])
14455d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
14465d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
14475d0a12d3SThurston Dang;
14485d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
14495d0a12d3SThurston Dang  %tmp2 = load i64, ptr %B
14505d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.urshl.i64(i64 %tmp1, i64 %tmp2)
14515d0a12d3SThurston Dang  ret i64 %tmp3
14525d0a12d3SThurston Dang}
14535d0a12d3SThurston Dang
14545d0a12d3SThurston Dangdefine i64 @urshl_scalar_constant(ptr %A) nounwind sanitize_memory {
14555d0a12d3SThurston Dang; CHECK-LABEL: define i64 @urshl_scalar_constant(
14565d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
14575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
14585d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
14595d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1460*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
14615d0a12d3SThurston Dang; CHECK:       2:
14625d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
14635d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
14645d0a12d3SThurston Dang; CHECK:       3:
14655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
14665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
14675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
14685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
14695d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP6]], align 8
14704ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.urshl.i64(i64 [[_MSLD]], i64 1)
14714ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP7]], 0
14725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.urshl.i64(i64 [[TMP1]], i64 1)
14735d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
14745d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
14755d0a12d3SThurston Dang;
14765d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
14775d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.urshl.i64(i64 %tmp1, i64 1)
14785d0a12d3SThurston Dang  ret i64 %tmp3
14795d0a12d3SThurston Dang}
14805d0a12d3SThurston Dang
14815d0a12d3SThurston Dangdefine <16 x i8> @srshl16b(ptr %A, ptr %B) nounwind sanitize_memory {
14825d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @srshl16b(
14835d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
14845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
14855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
14865d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
14875d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1488*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
14895d0a12d3SThurston Dang; CHECK:       3:
14905d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
14915d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
14925d0a12d3SThurston Dang; CHECK:       4:
14935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
14945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
14955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
14965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
14975d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
14985d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1499*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
15005d0a12d3SThurston Dang; CHECK:       8:
15015d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
15025d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
15035d0a12d3SThurston Dang; CHECK:       9:
15045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[B]], align 16
15055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
15065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
15075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
15085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP12]], align 16
15094ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <16 x i8> [[_MSLD1]] to i128
15104ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
15114ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
15124ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
15134ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <16 x i8>
15144ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> [[TMP2]])
15154ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP18]], [[TMP17]]
15165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> [[TMP2]])
15175d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
15185d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
15195d0a12d3SThurston Dang;
15205d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
15215d0a12d3SThurston Dang  %tmp2 = load <16 x i8>, ptr %B
15225d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
15235d0a12d3SThurston Dang  ret <16 x i8> %tmp3
15245d0a12d3SThurston Dang}
15255d0a12d3SThurston Dang
15265d0a12d3SThurston Dangdefine <8 x i16> @srshl8h(ptr %A, ptr %B) nounwind sanitize_memory {
15275d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @srshl8h(
15285d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
15295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
15305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
15315d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
15325d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1533*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
15345d0a12d3SThurston Dang; CHECK:       3:
15355d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
15365d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
15375d0a12d3SThurston Dang; CHECK:       4:
15385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
15395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
15405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
15415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
15425d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
15435d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1544*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
15455d0a12d3SThurston Dang; CHECK:       8:
15465d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
15475d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
15485d0a12d3SThurston Dang; CHECK:       9:
15495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[B]], align 16
15505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
15515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
15525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
15535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
15544ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i16> [[_MSLD1]] to i128
15554ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
15564ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
15574ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
15584ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <8 x i16>
15594ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> [[TMP2]])
15604ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP18]], [[TMP17]]
15615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> [[TMP2]])
15625d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
15635d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
15645d0a12d3SThurston Dang;
15655d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
15665d0a12d3SThurston Dang  %tmp2 = load <8 x i16>, ptr %B
15675d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
15685d0a12d3SThurston Dang  ret <8 x i16> %tmp3
15695d0a12d3SThurston Dang}
15705d0a12d3SThurston Dang
15715d0a12d3SThurston Dangdefine <4 x i32> @srshl4s(ptr %A, ptr %B) nounwind sanitize_memory {
15725d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @srshl4s(
15735d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
15745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
15755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
15765d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
15775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1578*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
15795d0a12d3SThurston Dang; CHECK:       3:
15805d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
15815d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
15825d0a12d3SThurston Dang; CHECK:       4:
15835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
15845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
15855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
15865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
15875d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
15885d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1589*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
15905d0a12d3SThurston Dang; CHECK:       8:
15915d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
15925d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
15935d0a12d3SThurston Dang; CHECK:       9:
15945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[B]], align 16
15955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
15965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
15975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
15985d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
15994ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i32> [[_MSLD1]] to i128
16004ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
16014ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
16024ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
16034ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <4 x i32>
16044ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> [[TMP2]])
16054ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP18]], [[TMP17]]
16065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> [[TMP2]])
16075d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
16085d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
16095d0a12d3SThurston Dang;
16105d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
16115d0a12d3SThurston Dang  %tmp2 = load <4 x i32>, ptr %B
16125d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
16135d0a12d3SThurston Dang  ret <4 x i32> %tmp3
16145d0a12d3SThurston Dang}
16155d0a12d3SThurston Dang
16165d0a12d3SThurston Dangdefine <2 x i64> @srshl2d(ptr %A, ptr %B) nounwind sanitize_memory {
16175d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @srshl2d(
16185d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
16195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
16205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
16215d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
16225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1623*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
16245d0a12d3SThurston Dang; CHECK:       3:
16255d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
16265d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
16275d0a12d3SThurston Dang; CHECK:       4:
16285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
16295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
16305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
16315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
16325d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
16335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1634*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
16355d0a12d3SThurston Dang; CHECK:       8:
16365d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
16375d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
16385d0a12d3SThurston Dang; CHECK:       9:
16395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr [[B]], align 16
16405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
16415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
16425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
16435d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
16444ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i64> [[_MSLD1]] to i128
16454ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
16464ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
16474ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
16484ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <2 x i64>
16494ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> [[TMP2]])
16504ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP18]], [[TMP17]]
16515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> [[TMP2]])
16525d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
16535d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
16545d0a12d3SThurston Dang;
16555d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
16565d0a12d3SThurston Dang  %tmp2 = load <2 x i64>, ptr %B
16575d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2)
16585d0a12d3SThurston Dang  ret <2 x i64> %tmp3
16595d0a12d3SThurston Dang}
16605d0a12d3SThurston Dang
16615d0a12d3SThurston Dangdefine <16 x i8> @urshl16b(ptr %A, ptr %B) nounwind sanitize_memory {
16625d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @urshl16b(
16635d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
16645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
16655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
16665d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
16675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1668*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
16695d0a12d3SThurston Dang; CHECK:       3:
16705d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
16715d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
16725d0a12d3SThurston Dang; CHECK:       4:
16735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
16745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
16755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
16765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
16775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
16785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1679*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
16805d0a12d3SThurston Dang; CHECK:       8:
16815d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
16825d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
16835d0a12d3SThurston Dang; CHECK:       9:
16845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[B]], align 16
16855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
16865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
16875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
16885d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP12]], align 16
16894ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <16 x i8> [[_MSLD1]] to i128
16904ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
16914ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
16924ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
16934ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <16 x i8>
16944ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> [[TMP2]])
16954ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP18]], [[TMP17]]
16965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> [[TMP2]])
16975d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
16985d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
16995d0a12d3SThurston Dang;
17005d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
17015d0a12d3SThurston Dang  %tmp2 = load <16 x i8>, ptr %B
17025d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
17035d0a12d3SThurston Dang  ret <16 x i8> %tmp3
17045d0a12d3SThurston Dang}
17055d0a12d3SThurston Dang
17065d0a12d3SThurston Dangdefine <8 x i16> @urshl8h(ptr %A, ptr %B) nounwind sanitize_memory {
17075d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @urshl8h(
17085d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
17095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
17105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
17115d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
17125d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1713*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
17145d0a12d3SThurston Dang; CHECK:       3:
17155d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
17165d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
17175d0a12d3SThurston Dang; CHECK:       4:
17185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
17195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
17205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
17215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
17225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
17235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1724*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
17255d0a12d3SThurston Dang; CHECK:       8:
17265d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
17275d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
17285d0a12d3SThurston Dang; CHECK:       9:
17295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[B]], align 16
17305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
17315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
17325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
17335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
17344ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i16> [[_MSLD1]] to i128
17354ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
17364ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
17374ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
17384ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <8 x i16>
17394ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> [[TMP2]])
17404ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP18]], [[TMP17]]
17415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> [[TMP2]])
17425d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
17435d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
17445d0a12d3SThurston Dang;
17455d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
17465d0a12d3SThurston Dang  %tmp2 = load <8 x i16>, ptr %B
17475d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
17485d0a12d3SThurston Dang  ret <8 x i16> %tmp3
17495d0a12d3SThurston Dang}
17505d0a12d3SThurston Dang
17515d0a12d3SThurston Dangdefine <4 x i32> @urshl4s(ptr %A, ptr %B) nounwind sanitize_memory {
17525d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @urshl4s(
17535d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
17545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
17555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
17565d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
17575d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1758*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
17595d0a12d3SThurston Dang; CHECK:       3:
17605d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
17615d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
17625d0a12d3SThurston Dang; CHECK:       4:
17635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
17645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
17655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
17665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
17675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
17685d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1769*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
17705d0a12d3SThurston Dang; CHECK:       8:
17715d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
17725d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
17735d0a12d3SThurston Dang; CHECK:       9:
17745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[B]], align 16
17755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
17765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
17775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
17785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
17794ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i32> [[_MSLD1]] to i128
17804ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
17814ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
17824ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
17834ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <4 x i32>
17844ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> [[TMP2]])
17854ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP18]], [[TMP17]]
17865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> [[TMP2]])
17875d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
17885d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
17895d0a12d3SThurston Dang;
17905d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
17915d0a12d3SThurston Dang  %tmp2 = load <4 x i32>, ptr %B
17925d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
17935d0a12d3SThurston Dang  ret <4 x i32> %tmp3
17945d0a12d3SThurston Dang}
17955d0a12d3SThurston Dang
17965d0a12d3SThurston Dangdefine <2 x i64> @urshl2d(ptr %A, ptr %B) nounwind sanitize_memory {
17975d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @urshl2d(
17985d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
17995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
18005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
18015d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
18025d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1803*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
18045d0a12d3SThurston Dang; CHECK:       3:
18055d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
18065d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
18075d0a12d3SThurston Dang; CHECK:       4:
18085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
18095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
18105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
18115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
18125d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
18135d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1814*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
18155d0a12d3SThurston Dang; CHECK:       8:
18165d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
18175d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
18185d0a12d3SThurston Dang; CHECK:       9:
18195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr [[B]], align 16
18205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
18215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
18225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
18235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
18244ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i64> [[_MSLD1]] to i128
18254ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
18264ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
18274ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
18284ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <2 x i64>
18294ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> [[TMP2]])
18304ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP18]], [[TMP17]]
18315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> [[TMP2]])
18325d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
18335d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
18345d0a12d3SThurston Dang;
18355d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
18365d0a12d3SThurston Dang  %tmp2 = load <2 x i64>, ptr %B
18375d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2)
18385d0a12d3SThurston Dang  ret <2 x i64> %tmp3
18395d0a12d3SThurston Dang}
18405d0a12d3SThurston Dang
18415d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.srshl.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
18425d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
18435d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
18445d0a12d3SThurston Dangdeclare <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64>, <1 x i64>) nounwind readnone
18455d0a12d3SThurston Dangdeclare i64 @llvm.aarch64.neon.srshl.i64(i64, i64) nounwind readnone
18465d0a12d3SThurston Dang
18475d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.urshl.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
18485d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
18495d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
18505d0a12d3SThurston Dangdeclare <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64>, <1 x i64>) nounwind readnone
18515d0a12d3SThurston Dangdeclare i64 @llvm.aarch64.neon.urshl.i64(i64, i64) nounwind readnone
18525d0a12d3SThurston Dang
18535d0a12d3SThurston Dangdeclare <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
18545d0a12d3SThurston Dangdeclare <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
18555d0a12d3SThurston Dangdeclare <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
18565d0a12d3SThurston Dangdeclare <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64>, <2 x i64>) nounwind readnone
18575d0a12d3SThurston Dang
18585d0a12d3SThurston Dangdeclare <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
18595d0a12d3SThurston Dangdeclare <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
18605d0a12d3SThurston Dangdeclare <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
18615d0a12d3SThurston Dangdeclare <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64>, <2 x i64>) nounwind readnone
18625d0a12d3SThurston Dang
18635d0a12d3SThurston Dangdefine <8 x i8> @sqrshl8b(ptr %A, ptr %B) nounwind sanitize_memory {
18645d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @sqrshl8b(
18655d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
18665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
18675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
18685d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
18695d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1870*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
18715d0a12d3SThurston Dang; CHECK:       3:
18725d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
18735d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
18745d0a12d3SThurston Dang; CHECK:       4:
18755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
18765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
18775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
18785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
18795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
18805d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1881*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
18825d0a12d3SThurston Dang; CHECK:       8:
18835d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
18845d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
18855d0a12d3SThurston Dang; CHECK:       9:
18865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[B]], align 8
18875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
18885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
18895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
18905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP12]], align 8
18914ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i8> [[_MSLD1]] to i64
18924ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
18934ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
18944ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <8 x i8>
18954ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqrshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> [[TMP2]])
18964ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP17]], [[TMP16]]
18975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqrshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> [[TMP2]])
18985d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
18995d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
19005d0a12d3SThurston Dang;
19015d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
19025d0a12d3SThurston Dang  %tmp2 = load <8 x i8>, ptr %B
19035d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqrshl.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
19045d0a12d3SThurston Dang  ret <8 x i8> %tmp3
19055d0a12d3SThurston Dang}
19065d0a12d3SThurston Dang
19075d0a12d3SThurston Dangdefine <4 x i16> @sqrshl4h(ptr %A, ptr %B) nounwind sanitize_memory {
19085d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @sqrshl4h(
19095d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
19105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
19115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
19125d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
19135d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1914*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
19155d0a12d3SThurston Dang; CHECK:       3:
19165d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
19175d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
19185d0a12d3SThurston Dang; CHECK:       4:
19195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
19205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
19215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
19225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
19235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
19245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1925*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
19265d0a12d3SThurston Dang; CHECK:       8:
19275d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
19285d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
19295d0a12d3SThurston Dang; CHECK:       9:
19305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[B]], align 8
19315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
19325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
19335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
19345d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP12]], align 8
19354ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i16> [[_MSLD1]] to i64
19364ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
19374ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
19384ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <4 x i16>
19394ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> [[TMP2]])
19404ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP17]], [[TMP16]]
19415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> [[TMP2]])
19425d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
19435d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
19445d0a12d3SThurston Dang;
19455d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
19465d0a12d3SThurston Dang  %tmp2 = load <4 x i16>, ptr %B
19475d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqrshl.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
19485d0a12d3SThurston Dang  ret <4 x i16> %tmp3
19495d0a12d3SThurston Dang}
19505d0a12d3SThurston Dang
19515d0a12d3SThurston Dangdefine <2 x i32> @sqrshl2s(ptr %A, ptr %B) nounwind sanitize_memory {
19525d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @sqrshl2s(
19535d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
19545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
19555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
19565d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
19575d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
1958*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
19595d0a12d3SThurston Dang; CHECK:       3:
19605d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
19615d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
19625d0a12d3SThurston Dang; CHECK:       4:
19635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
19645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
19655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
19665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
19675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
19685d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
1969*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
19705d0a12d3SThurston Dang; CHECK:       8:
19715d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
19725d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
19735d0a12d3SThurston Dang; CHECK:       9:
19745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[B]], align 8
19755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
19765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
19775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
19785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP12]], align 8
19794ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i32> [[_MSLD1]] to i64
19804ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
19814ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
19824ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <2 x i32>
19834ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqrshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> [[TMP2]])
19844ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP17]], [[TMP16]]
19855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqrshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> [[TMP2]])
19865d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
19875d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
19885d0a12d3SThurston Dang;
19895d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
19905d0a12d3SThurston Dang  %tmp2 = load <2 x i32>, ptr %B
19915d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqrshl.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
19925d0a12d3SThurston Dang  ret <2 x i32> %tmp3
19935d0a12d3SThurston Dang}
19945d0a12d3SThurston Dang
19955d0a12d3SThurston Dangdefine <8 x i8> @uqrshl8b(ptr %A, ptr %B) nounwind sanitize_memory {
19965d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @uqrshl8b(
19975d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
19985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
19995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
20005d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
20015d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2002*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
20035d0a12d3SThurston Dang; CHECK:       3:
20045d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
20055d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
20065d0a12d3SThurston Dang; CHECK:       4:
20075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
20085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
20095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
20105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
20115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
20125d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2013*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
20145d0a12d3SThurston Dang; CHECK:       8:
20155d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
20165d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
20175d0a12d3SThurston Dang; CHECK:       9:
20185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[B]], align 8
20195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
20205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
20215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
20225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP12]], align 8
20234ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i8> [[_MSLD1]] to i64
20244ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
20254ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
20264ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <8 x i8>
20274ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqrshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> [[TMP2]])
20284ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP17]], [[TMP16]]
20295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqrshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> [[TMP2]])
20305d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
20315d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
20325d0a12d3SThurston Dang;
20335d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
20345d0a12d3SThurston Dang  %tmp2 = load <8 x i8>, ptr %B
20355d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.uqrshl.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2)
20365d0a12d3SThurston Dang  ret <8 x i8> %tmp3
20375d0a12d3SThurston Dang}
20385d0a12d3SThurston Dang
20395d0a12d3SThurston Dangdefine <4 x i16> @uqrshl4h(ptr %A, ptr %B) nounwind sanitize_memory {
20405d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @uqrshl4h(
20415d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
20425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
20435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
20445d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
20455d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2046*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
20475d0a12d3SThurston Dang; CHECK:       3:
20485d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
20495d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
20505d0a12d3SThurston Dang; CHECK:       4:
20515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
20525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
20535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
20545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
20555d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
20565d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2057*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
20585d0a12d3SThurston Dang; CHECK:       8:
20595d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
20605d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
20615d0a12d3SThurston Dang; CHECK:       9:
20625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[B]], align 8
20635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
20645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
20655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
20665d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP12]], align 8
20674ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i16> [[_MSLD1]] to i64
20684ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
20694ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
20704ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <4 x i16>
20714ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqrshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> [[TMP2]])
20724ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP17]], [[TMP16]]
20735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqrshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> [[TMP2]])
20745d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
20755d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
20765d0a12d3SThurston Dang;
20775d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
20785d0a12d3SThurston Dang  %tmp2 = load <4 x i16>, ptr %B
20795d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.uqrshl.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2)
20805d0a12d3SThurston Dang  ret <4 x i16> %tmp3
20815d0a12d3SThurston Dang}
20825d0a12d3SThurston Dang
20835d0a12d3SThurston Dangdefine <2 x i32> @uqrshl2s(ptr %A, ptr %B) nounwind sanitize_memory {
20845d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @uqrshl2s(
20855d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
20865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
20875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
20885d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
20895d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2090*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
20915d0a12d3SThurston Dang; CHECK:       3:
20925d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
20935d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
20945d0a12d3SThurston Dang; CHECK:       4:
20955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
20965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
20975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
20985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
20995d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
21005d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2101*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
21025d0a12d3SThurston Dang; CHECK:       8:
21035d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
21045d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
21055d0a12d3SThurston Dang; CHECK:       9:
21065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[B]], align 8
21075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
21085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
21095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
21105d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP12]], align 8
21114ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i32> [[_MSLD1]] to i64
21124ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
21134ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
21144ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <2 x i32>
21154ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqrshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> [[TMP2]])
21164ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP17]], [[TMP16]]
21175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqrshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> [[TMP2]])
21185d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
21195d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
21205d0a12d3SThurston Dang;
21215d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
21225d0a12d3SThurston Dang  %tmp2 = load <2 x i32>, ptr %B
21235d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.uqrshl.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2)
21245d0a12d3SThurston Dang  ret <2 x i32> %tmp3
21255d0a12d3SThurston Dang}
21265d0a12d3SThurston Dang
21275d0a12d3SThurston Dangdefine <16 x i8> @sqrshl16b(ptr %A, ptr %B) nounwind sanitize_memory {
21285d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @sqrshl16b(
21295d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
21305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
21315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
21325d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
21335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2134*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
21355d0a12d3SThurston Dang; CHECK:       3:
21365d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
21375d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
21385d0a12d3SThurston Dang; CHECK:       4:
21395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
21405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
21415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
21425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
21435d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
21445d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2145*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
21465d0a12d3SThurston Dang; CHECK:       8:
21475d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
21485d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
21495d0a12d3SThurston Dang; CHECK:       9:
21505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[B]], align 16
21515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
21525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
21535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
21545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP12]], align 16
21554ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <16 x i8> [[_MSLD1]] to i128
21564ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
21574ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
21584ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
21594ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <16 x i8>
21604ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqrshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> [[TMP2]])
21614ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP18]], [[TMP17]]
21625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqrshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> [[TMP2]])
21635d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
21645d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
21655d0a12d3SThurston Dang;
21665d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
21675d0a12d3SThurston Dang  %tmp2 = load <16 x i8>, ptr %B
21685d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.sqrshl.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
21695d0a12d3SThurston Dang  ret <16 x i8> %tmp3
21705d0a12d3SThurston Dang}
21715d0a12d3SThurston Dang
21725d0a12d3SThurston Dangdefine <8 x i16> @sqrshl8h(ptr %A, ptr %B) nounwind sanitize_memory {
21735d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @sqrshl8h(
21745d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
21755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
21765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
21775d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
21785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2179*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
21805d0a12d3SThurston Dang; CHECK:       3:
21815d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
21825d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
21835d0a12d3SThurston Dang; CHECK:       4:
21845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
21855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
21865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
21875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
21885d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
21895d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2190*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
21915d0a12d3SThurston Dang; CHECK:       8:
21925d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
21935d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
21945d0a12d3SThurston Dang; CHECK:       9:
21955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[B]], align 16
21965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
21975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
21985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
21995d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
22004ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i16> [[_MSLD1]] to i128
22014ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
22024ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
22034ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
22044ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <8 x i16>
22054ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqrshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> [[TMP2]])
22064ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP18]], [[TMP17]]
22075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqrshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> [[TMP2]])
22085d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
22095d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
22105d0a12d3SThurston Dang;
22115d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
22125d0a12d3SThurston Dang  %tmp2 = load <8 x i16>, ptr %B
22135d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.sqrshl.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
22145d0a12d3SThurston Dang  ret <8 x i16> %tmp3
22155d0a12d3SThurston Dang}
22165d0a12d3SThurston Dang
22175d0a12d3SThurston Dangdefine <4 x i32> @sqrshl4s(ptr %A, ptr %B) nounwind sanitize_memory {
22185d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @sqrshl4s(
22195d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
22205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
22215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
22225d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
22235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2224*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
22255d0a12d3SThurston Dang; CHECK:       3:
22265d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
22275d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
22285d0a12d3SThurston Dang; CHECK:       4:
22295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
22305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
22315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
22325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
22335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
22345d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2235*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
22365d0a12d3SThurston Dang; CHECK:       8:
22375d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
22385d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
22395d0a12d3SThurston Dang; CHECK:       9:
22405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[B]], align 16
22415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
22425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
22435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
22445d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
22454ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i32> [[_MSLD1]] to i128
22464ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
22474ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
22484ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
22494ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <4 x i32>
22504ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqrshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> [[TMP2]])
22514ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP18]], [[TMP17]]
22525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqrshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> [[TMP2]])
22535d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
22545d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
22555d0a12d3SThurston Dang;
22565d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
22575d0a12d3SThurston Dang  %tmp2 = load <4 x i32>, ptr %B
22585d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.sqrshl.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
22595d0a12d3SThurston Dang  ret <4 x i32> %tmp3
22605d0a12d3SThurston Dang}
22615d0a12d3SThurston Dang
22625d0a12d3SThurston Dangdefine <2 x i64> @sqrshl2d(ptr %A, ptr %B) nounwind sanitize_memory {
22635d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @sqrshl2d(
22645d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
22655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
22665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
22675d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
22685d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2269*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
22705d0a12d3SThurston Dang; CHECK:       3:
22715d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
22725d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
22735d0a12d3SThurston Dang; CHECK:       4:
22745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
22755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
22765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
22775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
22785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
22795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2280*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
22815d0a12d3SThurston Dang; CHECK:       8:
22825d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
22835d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
22845d0a12d3SThurston Dang; CHECK:       9:
22855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr [[B]], align 16
22865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
22875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
22885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
22895d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
22904ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i64> [[_MSLD1]] to i128
22914ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
22924ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
22934ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
22944ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <2 x i64>
22954ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqrshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> [[TMP2]])
22964ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP18]], [[TMP17]]
22975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqrshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> [[TMP2]])
22985d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
22995d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
23005d0a12d3SThurston Dang;
23015d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
23025d0a12d3SThurston Dang  %tmp2 = load <2 x i64>, ptr %B
23035d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.sqrshl.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2)
23045d0a12d3SThurston Dang  ret <2 x i64> %tmp3
23055d0a12d3SThurston Dang}
23065d0a12d3SThurston Dang
23075d0a12d3SThurston Dangdefine <1 x i64> @sqrshl1d(ptr %A, ptr %B) nounwind sanitize_memory {
23085d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @sqrshl1d(
23095d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
23105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
23115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
23125d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
23135d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2314*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
23155d0a12d3SThurston Dang; CHECK:       3:
23165d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
23175d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
23185d0a12d3SThurston Dang; CHECK:       4:
23195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
23205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
23215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
23225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
23235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP7]], align 8
23245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2325*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
23265d0a12d3SThurston Dang; CHECK:       8:
23275d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
23285d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
23295d0a12d3SThurston Dang; CHECK:       9:
23305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr [[B]], align 8
23315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
23325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
23335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
23345d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <1 x i64>, ptr [[TMP12]], align 8
23354ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[_MSLD1]] to i64
23364ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
23374ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
23384ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <1 x i64>
23394ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <1 x i64> @llvm.aarch64.neon.sqrshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> [[TMP2]])
23404ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP17]], [[TMP16]]
23415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.sqrshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> [[TMP2]])
23425d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
23435d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
23445d0a12d3SThurston Dang;
23455d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
23465d0a12d3SThurston Dang  %tmp2 = load <1 x i64>, ptr %B
23475d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.sqrshl.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2)
23485d0a12d3SThurston Dang  ret <1 x i64> %tmp3
23495d0a12d3SThurston Dang}
23505d0a12d3SThurston Dang
23515d0a12d3SThurston Dangdefine <1 x i64> @sqrshl1d_constant(ptr %A) nounwind sanitize_memory {
23525d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @sqrshl1d_constant(
23535d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
23545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
23555d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
23565d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2357*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
23585d0a12d3SThurston Dang; CHECK:       2:
23595d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
23605d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
23615d0a12d3SThurston Dang; CHECK:       3:
23625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
23635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
23645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
23655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
23665d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP6]], align 8
2367*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <1 x i64> @llvm.aarch64.neon.sqrshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> splat (i64 1))
23684ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP7]], zeroinitializer
2369*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.sqrshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> splat (i64 1))
23705d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
23715d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
23725d0a12d3SThurston Dang;
23735d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
23745d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.sqrshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 1>)
23755d0a12d3SThurston Dang  ret <1 x i64> %tmp3
23765d0a12d3SThurston Dang}
23775d0a12d3SThurston Dang
23785d0a12d3SThurston Dangdefine i64 @sqrshl_scalar(ptr %A, ptr %B) nounwind sanitize_memory {
23795d0a12d3SThurston Dang; CHECK-LABEL: define i64 @sqrshl_scalar(
23805d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
23815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
23825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
23835d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
23845d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2385*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
23865d0a12d3SThurston Dang; CHECK:       3:
23875d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
23885d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
23895d0a12d3SThurston Dang; CHECK:       4:
23905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
23915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
23925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
23935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
23945d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP7]], align 8
23955d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2396*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
23975d0a12d3SThurston Dang; CHECK:       8:
23985d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
23995d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
24005d0a12d3SThurston Dang; CHECK:       9:
24015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr [[B]], align 8
24025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
24035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
24045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
24055d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load i64, ptr [[TMP12]], align 8
24064ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[_MSLD1]], 0
24074ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
24084ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = call i64 @llvm.aarch64.neon.sqrshl.i64(i64 [[_MSLD]], i64 [[TMP2]])
24094ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP15]], [[TMP14]]
24105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.sqrshl.i64(i64 [[TMP1]], i64 [[TMP2]])
24115d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
24125d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
24135d0a12d3SThurston Dang;
24145d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
24155d0a12d3SThurston Dang  %tmp2 = load i64, ptr %B
24165d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.sqrshl.i64(i64 %tmp1, i64 %tmp2)
24175d0a12d3SThurston Dang  ret i64 %tmp3
24185d0a12d3SThurston Dang}
24195d0a12d3SThurston Dang
24205d0a12d3SThurston Dangdefine i64 @sqrshl_scalar_constant(ptr %A) nounwind sanitize_memory {
24215d0a12d3SThurston Dang; CHECK-LABEL: define i64 @sqrshl_scalar_constant(
24225d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
24235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
24245d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
24255d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2426*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
24275d0a12d3SThurston Dang; CHECK:       2:
24285d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
24295d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
24305d0a12d3SThurston Dang; CHECK:       3:
24315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
24325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
24335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
24345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
24355d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP6]], align 8
24364ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.sqrshl.i64(i64 [[_MSLD]], i64 1)
24374ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP7]], 0
24385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.sqrshl.i64(i64 [[TMP1]], i64 1)
24395d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
24405d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
24415d0a12d3SThurston Dang;
24425d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
24435d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.sqrshl.i64(i64 %tmp1, i64 1)
24445d0a12d3SThurston Dang  ret i64 %tmp3
24455d0a12d3SThurston Dang}
24465d0a12d3SThurston Dang
24475d0a12d3SThurston Dangdefine <16 x i8> @uqrshl16b(ptr %A, ptr %B) nounwind sanitize_memory {
24485d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @uqrshl16b(
24495d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
24505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
24515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
24525d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
24535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2454*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
24555d0a12d3SThurston Dang; CHECK:       3:
24565d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
24575d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
24585d0a12d3SThurston Dang; CHECK:       4:
24595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
24605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
24615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
24625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
24635d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
24645d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2465*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
24665d0a12d3SThurston Dang; CHECK:       8:
24675d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
24685d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
24695d0a12d3SThurston Dang; CHECK:       9:
24705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[B]], align 16
24715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
24725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
24735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
24745d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP12]], align 16
24754ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <16 x i8> [[_MSLD1]] to i128
24764ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
24774ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
24784ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
24794ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <16 x i8>
24804ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <16 x i8> @llvm.aarch64.neon.uqrshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> [[TMP2]])
24814ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP18]], [[TMP17]]
24825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.uqrshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> [[TMP2]])
24835d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
24845d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
24855d0a12d3SThurston Dang;
24865d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
24875d0a12d3SThurston Dang  %tmp2 = load <16 x i8>, ptr %B
24885d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.uqrshl.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2)
24895d0a12d3SThurston Dang  ret <16 x i8> %tmp3
24905d0a12d3SThurston Dang}
24915d0a12d3SThurston Dang
24925d0a12d3SThurston Dangdefine <8 x i16> @uqrshl8h(ptr %A, ptr %B) nounwind sanitize_memory {
24935d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @uqrshl8h(
24945d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
24955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
24965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
24975d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
24985d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2499*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
25005d0a12d3SThurston Dang; CHECK:       3:
25015d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
25025d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
25035d0a12d3SThurston Dang; CHECK:       4:
25045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
25055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
25065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
25075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
25085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
25095d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2510*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
25115d0a12d3SThurston Dang; CHECK:       8:
25125d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
25135d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
25145d0a12d3SThurston Dang; CHECK:       9:
25155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[B]], align 16
25165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
25175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
25185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
25195d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
25204ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i16> [[_MSLD1]] to i128
25214ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
25224ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
25234ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
25244ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <8 x i16>
25254ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <8 x i16> @llvm.aarch64.neon.uqrshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> [[TMP2]])
25264ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP18]], [[TMP17]]
25275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.uqrshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> [[TMP2]])
25285d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
25295d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
25305d0a12d3SThurston Dang;
25315d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
25325d0a12d3SThurston Dang  %tmp2 = load <8 x i16>, ptr %B
25335d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.uqrshl.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2)
25345d0a12d3SThurston Dang  ret <8 x i16> %tmp3
25355d0a12d3SThurston Dang}
25365d0a12d3SThurston Dang
25375d0a12d3SThurston Dangdefine <4 x i32> @uqrshl4s(ptr %A, ptr %B) nounwind sanitize_memory {
25385d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @uqrshl4s(
25395d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
25405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
25415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
25425d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
25435d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2544*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
25455d0a12d3SThurston Dang; CHECK:       3:
25465d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
25475d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
25485d0a12d3SThurston Dang; CHECK:       4:
25495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
25505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
25515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
25525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
25535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
25545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2555*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
25565d0a12d3SThurston Dang; CHECK:       8:
25575d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
25585d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
25595d0a12d3SThurston Dang; CHECK:       9:
25605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[B]], align 16
25615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
25625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
25635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
25645d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
25654ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i32> [[_MSLD1]] to i128
25664ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
25674ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
25684ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
25694ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <4 x i32>
25704ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <4 x i32> @llvm.aarch64.neon.uqrshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> [[TMP2]])
25714ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP18]], [[TMP17]]
25725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.uqrshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> [[TMP2]])
25735d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
25745d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
25755d0a12d3SThurston Dang;
25765d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
25775d0a12d3SThurston Dang  %tmp2 = load <4 x i32>, ptr %B
25785d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.uqrshl.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2)
25795d0a12d3SThurston Dang  ret <4 x i32> %tmp3
25805d0a12d3SThurston Dang}
25815d0a12d3SThurston Dang
25825d0a12d3SThurston Dangdefine <2 x i64> @uqrshl2d(ptr %A, ptr %B) nounwind sanitize_memory {
25835d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @uqrshl2d(
25845d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
25855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
25865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
25875d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
25885d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2589*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
25905d0a12d3SThurston Dang; CHECK:       3:
25915d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
25925d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
25935d0a12d3SThurston Dang; CHECK:       4:
25945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
25955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
25965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
25975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
25985d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
25995d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2600*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
26015d0a12d3SThurston Dang; CHECK:       8:
26025d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
26035d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
26045d0a12d3SThurston Dang; CHECK:       9:
26055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr [[B]], align 16
26065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
26075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
26085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
26095d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
26104ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i64> [[_MSLD1]] to i128
26114ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = trunc i128 [[TMP13]] to i64
26124ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = icmp ne i64 [[TMP14]], 0
26134ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = sext i1 [[TMP15]] to i128
26144ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = bitcast i128 [[TMP16]] to <2 x i64>
26154ce559d0SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = call <2 x i64> @llvm.aarch64.neon.uqrshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> [[TMP2]])
26164ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP18]], [[TMP17]]
26175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.uqrshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> [[TMP2]])
26185d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
26195d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
26205d0a12d3SThurston Dang;
26215d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
26225d0a12d3SThurston Dang  %tmp2 = load <2 x i64>, ptr %B
26235d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.uqrshl.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2)
26245d0a12d3SThurston Dang  ret <2 x i64> %tmp3
26255d0a12d3SThurston Dang}
26265d0a12d3SThurston Dang
26275d0a12d3SThurston Dangdefine <1 x i64> @uqrshl1d(ptr %A, ptr %B) nounwind sanitize_memory {
26285d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @uqrshl1d(
26295d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
26305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
26315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
26325d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
26335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2634*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
26355d0a12d3SThurston Dang; CHECK:       3:
26365d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
26375d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
26385d0a12d3SThurston Dang; CHECK:       4:
26395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
26405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
26415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
26425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
26435d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP7]], align 8
26445d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2645*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
26465d0a12d3SThurston Dang; CHECK:       8:
26475d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
26485d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
26495d0a12d3SThurston Dang; CHECK:       9:
26505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr [[B]], align 8
26515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
26525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
26535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
26545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <1 x i64>, ptr [[TMP12]], align 8
26554ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[_MSLD1]] to i64
26564ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = icmp ne i64 [[TMP13]], 0
26574ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = sext i1 [[TMP14]] to i64
26584ce559d0SThurston Dang; CHECK-NEXT:    [[TMP16:%.*]] = bitcast i64 [[TMP15]] to <1 x i64>
26594ce559d0SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = call <1 x i64> @llvm.aarch64.neon.uqrshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> [[TMP2]])
26604ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP17]], [[TMP16]]
26615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.uqrshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> [[TMP2]])
26625d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
26635d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
26645d0a12d3SThurston Dang;
26655d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
26665d0a12d3SThurston Dang  %tmp2 = load <1 x i64>, ptr %B
26675d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.uqrshl.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2)
26685d0a12d3SThurston Dang  ret <1 x i64> %tmp3
26695d0a12d3SThurston Dang}
26705d0a12d3SThurston Dang
26715d0a12d3SThurston Dangdefine <1 x i64> @uqrshl1d_constant(ptr %A) nounwind sanitize_memory {
26725d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @uqrshl1d_constant(
26735d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
26745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
26755d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
26765d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2677*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
26785d0a12d3SThurston Dang; CHECK:       2:
26795d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
26805d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
26815d0a12d3SThurston Dang; CHECK:       3:
26825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
26835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
26845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
26855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
26865d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP6]], align 8
2687*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <1 x i64> @llvm.aarch64.neon.uqrshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> splat (i64 1))
26884ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP7]], zeroinitializer
2689*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.uqrshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> splat (i64 1))
26905d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
26915d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
26925d0a12d3SThurston Dang;
26935d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
26945d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.uqrshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 1>)
26955d0a12d3SThurston Dang  ret <1 x i64> %tmp3
26965d0a12d3SThurston Dang}
26975d0a12d3SThurston Dang
26985d0a12d3SThurston Dangdefine i64 @uqrshl_scalar(ptr %A, ptr %B) nounwind sanitize_memory {
26995d0a12d3SThurston Dang; CHECK-LABEL: define i64 @uqrshl_scalar(
27005d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
27015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
27025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
27035d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
27045d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2705*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
27065d0a12d3SThurston Dang; CHECK:       3:
27075d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
27085d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
27095d0a12d3SThurston Dang; CHECK:       4:
27105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
27115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
27125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
27135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
27145d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP7]], align 8
27155d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
2716*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
27175d0a12d3SThurston Dang; CHECK:       8:
27185d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
27195d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
27205d0a12d3SThurston Dang; CHECK:       9:
27215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr [[B]], align 8
27225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
27235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
27245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
27255d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load i64, ptr [[TMP12]], align 8
27264ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = icmp ne i64 [[_MSLD1]], 0
27274ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = sext i1 [[TMP13]] to i64
27284ce559d0SThurston Dang; CHECK-NEXT:    [[TMP15:%.*]] = call i64 @llvm.aarch64.neon.uqrshl.i64(i64 [[_MSLD]], i64 [[TMP2]])
27294ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP15]], [[TMP14]]
27305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.uqrshl.i64(i64 [[TMP1]], i64 [[TMP2]])
27315d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
27325d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
27335d0a12d3SThurston Dang;
27345d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
27355d0a12d3SThurston Dang  %tmp2 = load i64, ptr %B
27365d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.uqrshl.i64(i64 %tmp1, i64 %tmp2)
27375d0a12d3SThurston Dang  ret i64 %tmp3
27385d0a12d3SThurston Dang}
27395d0a12d3SThurston Dang
27405d0a12d3SThurston Dangdefine i64 @uqrshl_scalar_constant(ptr %A) nounwind sanitize_memory {
27415d0a12d3SThurston Dang; CHECK-LABEL: define i64 @uqrshl_scalar_constant(
27425d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
27435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
27445d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
27455d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2746*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
27475d0a12d3SThurston Dang; CHECK:       2:
27485d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
27495d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
27505d0a12d3SThurston Dang; CHECK:       3:
27515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
27525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
27535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
27545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
27555d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP6]], align 8
27564ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.uqrshl.i64(i64 [[_MSLD]], i64 1)
27574ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP7]], 0
27585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.uqrshl.i64(i64 [[TMP1]], i64 1)
27595d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
27605d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
27615d0a12d3SThurston Dang;
27625d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
27635d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.uqrshl.i64(i64 %tmp1, i64 1)
27645d0a12d3SThurston Dang  ret i64 %tmp3
27655d0a12d3SThurston Dang}
27665d0a12d3SThurston Dang
27675d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.sqrshl.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
27685d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.sqrshl.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
27695d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.sqrshl.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
27705d0a12d3SThurston Dangdeclare <1 x i64> @llvm.aarch64.neon.sqrshl.v1i64(<1 x i64>, <1 x i64>) nounwind readnone
27715d0a12d3SThurston Dangdeclare i64 @llvm.aarch64.neon.sqrshl.i64(i64, i64) nounwind readnone
27725d0a12d3SThurston Dang
27735d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.uqrshl.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
27745d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.uqrshl.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
27755d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.uqrshl.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
27765d0a12d3SThurston Dangdeclare <1 x i64> @llvm.aarch64.neon.uqrshl.v1i64(<1 x i64>, <1 x i64>) nounwind readnone
27775d0a12d3SThurston Dangdeclare i64 @llvm.aarch64.neon.uqrshl.i64(i64, i64) nounwind readnone
27785d0a12d3SThurston Dang
27795d0a12d3SThurston Dangdeclare <16 x i8> @llvm.aarch64.neon.sqrshl.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
27805d0a12d3SThurston Dangdeclare <8 x i16> @llvm.aarch64.neon.sqrshl.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
27815d0a12d3SThurston Dangdeclare <4 x i32> @llvm.aarch64.neon.sqrshl.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
27825d0a12d3SThurston Dangdeclare <2 x i64> @llvm.aarch64.neon.sqrshl.v2i64(<2 x i64>, <2 x i64>) nounwind readnone
27835d0a12d3SThurston Dang
27845d0a12d3SThurston Dangdeclare <16 x i8> @llvm.aarch64.neon.uqrshl.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
27855d0a12d3SThurston Dangdeclare <8 x i16> @llvm.aarch64.neon.uqrshl.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
27865d0a12d3SThurston Dangdeclare <4 x i32> @llvm.aarch64.neon.uqrshl.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
27875d0a12d3SThurston Dangdeclare <2 x i64> @llvm.aarch64.neon.uqrshl.v2i64(<2 x i64>, <2 x i64>) nounwind readnone
27885d0a12d3SThurston Dang
27895d0a12d3SThurston Dangdefine <8 x i8> @urshr8b(ptr %A) nounwind sanitize_memory {
27905d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @urshr8b(
27915d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
27925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
27935d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
27945d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2795*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
27965d0a12d3SThurston Dang; CHECK:       2:
27975d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
27985d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
27995d0a12d3SThurston Dang; CHECK:       3:
28005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
28015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
28025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
28035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
28045d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP6]], align 8
2805*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.urshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> splat (i8 -1))
28064ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
2807*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.urshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> splat (i8 -1))
28085d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
28095d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
28105d0a12d3SThurston Dang;
28115d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
28125d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.urshl.v8i8(<8 x i8> %tmp1, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
28135d0a12d3SThurston Dang  ret <8 x i8> %tmp3
28145d0a12d3SThurston Dang}
28155d0a12d3SThurston Dang
28165d0a12d3SThurston Dangdefine <4 x i16> @urshr4h(ptr %A) nounwind sanitize_memory {
28175d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @urshr4h(
28185d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
28195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
28205d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
28215d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2822*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
28235d0a12d3SThurston Dang; CHECK:       2:
28245d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
28255d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
28265d0a12d3SThurston Dang; CHECK:       3:
28275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
28285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
28295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
28305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
28315d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP6]], align 8
2832*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> splat (i16 -1))
28334ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
2834*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> splat (i16 -1))
28355d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
28365d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
28375d0a12d3SThurston Dang;
28385d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
28395d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16> %tmp1, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>)
28405d0a12d3SThurston Dang  ret <4 x i16> %tmp3
28415d0a12d3SThurston Dang}
28425d0a12d3SThurston Dang
28435d0a12d3SThurston Dangdefine <2 x i32> @urshr2s(ptr %A) nounwind sanitize_memory {
28445d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @urshr2s(
28455d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
28465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
28475d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
28485d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2849*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
28505d0a12d3SThurston Dang; CHECK:       2:
28515d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
28525d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
28535d0a12d3SThurston Dang; CHECK:       3:
28545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
28555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
28565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
28575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
28585d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8
2859*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> splat (i32 -1))
28604ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
2861*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> splat (i32 -1))
28625d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
28635d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
28645d0a12d3SThurston Dang;
28655d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
28665d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> %tmp1, <2 x i32> <i32 -1, i32 -1>)
28675d0a12d3SThurston Dang  ret <2 x i32> %tmp3
28685d0a12d3SThurston Dang}
28695d0a12d3SThurston Dang
28705d0a12d3SThurston Dangdefine <16 x i8> @urshr16b(ptr %A) nounwind sanitize_memory {
28715d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @urshr16b(
28725d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
28735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
28745d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
28755d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2876*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
28775d0a12d3SThurston Dang; CHECK:       2:
28785d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
28795d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
28805d0a12d3SThurston Dang; CHECK:       3:
28815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
28825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
28835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
28845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
28855d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP6]], align 16
2886*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> splat (i8 -1))
28874ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP7]], zeroinitializer
2888*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> splat (i8 -1))
28895d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
28905d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
28915d0a12d3SThurston Dang;
28925d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
28935d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> %tmp1, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
28945d0a12d3SThurston Dang  ret <16 x i8> %tmp3
28955d0a12d3SThurston Dang}
28965d0a12d3SThurston Dang
28975d0a12d3SThurston Dangdefine <8 x i16> @urshr8h(ptr %A) nounwind sanitize_memory {
28985d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @urshr8h(
28995d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
29005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
29015d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
29025d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2903*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
29045d0a12d3SThurston Dang; CHECK:       2:
29055d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
29065d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
29075d0a12d3SThurston Dang; CHECK:       3:
29085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
29095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
29105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
29115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
29125d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
2913*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> splat (i16 -1))
29144ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
2915*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> splat (i16 -1))
29165d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
29175d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
29185d0a12d3SThurston Dang;
29195d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
29205d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16> %tmp1, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>)
29215d0a12d3SThurston Dang  ret <8 x i16> %tmp3
29225d0a12d3SThurston Dang}
29235d0a12d3SThurston Dang
29245d0a12d3SThurston Dangdefine <4 x i32> @urshr4s(ptr %A) nounwind sanitize_memory {
29255d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @urshr4s(
29265d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
29275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
29285d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
29295d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2930*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
29315d0a12d3SThurston Dang; CHECK:       2:
29325d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
29335d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
29345d0a12d3SThurston Dang; CHECK:       3:
29355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
29365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
29375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
29385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
29395d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
2940*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> splat (i32 -1))
29414ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
2942*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> splat (i32 -1))
29435d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
29445d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
29455d0a12d3SThurston Dang;
29465d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
29475d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32> %tmp1, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>)
29485d0a12d3SThurston Dang  ret <4 x i32> %tmp3
29495d0a12d3SThurston Dang}
29505d0a12d3SThurston Dang
29515d0a12d3SThurston Dangdefine <2 x i64> @urshr2d(ptr %A) nounwind sanitize_memory {
29525d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @urshr2d(
29535d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
29545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
29555d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
29565d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2957*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
29585d0a12d3SThurston Dang; CHECK:       2:
29595d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
29605d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
29615d0a12d3SThurston Dang; CHECK:       3:
29625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
29635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
29645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
29655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
29665d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
2967*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> splat (i64 -1))
29684ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
2969*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> splat (i64 -1))
29705d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
29715d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
29725d0a12d3SThurston Dang;
29735d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
29745d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> %tmp1, <2 x i64> <i64 -1, i64 -1>)
29755d0a12d3SThurston Dang  ret <2 x i64> %tmp3
29765d0a12d3SThurston Dang}
29775d0a12d3SThurston Dang
29785d0a12d3SThurston Dangdefine <1 x i64> @urshr1d(ptr %A) nounwind sanitize_memory {
29795d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @urshr1d(
29805d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
29815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
29825d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
29835d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
2984*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
29855d0a12d3SThurston Dang; CHECK:       2:
29865d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
29875d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
29885d0a12d3SThurston Dang; CHECK:       3:
29895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
29905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
29915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
29925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
29935d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP6]], align 8
2994*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> splat (i64 -1))
29954ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP7]], zeroinitializer
2996*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> splat (i64 -1))
29975d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
29985d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
29995d0a12d3SThurston Dang;
30005d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
30015d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 -1>)
30025d0a12d3SThurston Dang  ret <1 x i64> %tmp3
30035d0a12d3SThurston Dang}
30045d0a12d3SThurston Dang
30055d0a12d3SThurston Dangdefine i64 @urshr_scalar(ptr %A) nounwind sanitize_memory {
30065d0a12d3SThurston Dang; CHECK-LABEL: define i64 @urshr_scalar(
30075d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
30085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
30095d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
30105d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3011*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
30125d0a12d3SThurston Dang; CHECK:       2:
30135d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
30145d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
30155d0a12d3SThurston Dang; CHECK:       3:
30165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
30175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
30185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
30195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
30205d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP6]], align 8
30214ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.urshl.i64(i64 [[_MSLD]], i64 -1)
30224ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP7]], 0
30235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.urshl.i64(i64 [[TMP1]], i64 -1)
30245d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
30255d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
30265d0a12d3SThurston Dang;
30275d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
30285d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.urshl.i64(i64 %tmp1, i64 -1)
30295d0a12d3SThurston Dang  ret i64 %tmp3
30305d0a12d3SThurston Dang}
30315d0a12d3SThurston Dang
30325d0a12d3SThurston Dangdefine <8 x i8> @srshr8b(ptr %A) nounwind sanitize_memory {
30335d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @srshr8b(
30345d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
30355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
30365d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
30375d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3038*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
30395d0a12d3SThurston Dang; CHECK:       2:
30405d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
30415d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
30425d0a12d3SThurston Dang; CHECK:       3:
30435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
30445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
30455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
30465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
30475d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP6]], align 8
3048*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.srshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> splat (i8 -1))
30494ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
3050*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.srshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> splat (i8 -1))
30515d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
30525d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
30535d0a12d3SThurston Dang;
30545d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
30555d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.srshl.v8i8(<8 x i8> %tmp1, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
30565d0a12d3SThurston Dang  ret <8 x i8> %tmp3
30575d0a12d3SThurston Dang}
30585d0a12d3SThurston Dang
30595d0a12d3SThurston Dangdefine <4 x i16> @srshr4h(ptr %A) nounwind sanitize_memory {
30605d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @srshr4h(
30615d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
30625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
30635d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
30645d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3065*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
30665d0a12d3SThurston Dang; CHECK:       2:
30675d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
30685d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
30695d0a12d3SThurston Dang; CHECK:       3:
30705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
30715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
30725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
30735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
30745d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP6]], align 8
3075*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> splat (i16 -1))
30764ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
3077*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> splat (i16 -1))
30785d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
30795d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
30805d0a12d3SThurston Dang;
30815d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
30825d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16> %tmp1, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>)
30835d0a12d3SThurston Dang  ret <4 x i16> %tmp3
30845d0a12d3SThurston Dang}
30855d0a12d3SThurston Dang
30865d0a12d3SThurston Dangdefine <2 x i32> @srshr2s(ptr %A) nounwind sanitize_memory {
30875d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @srshr2s(
30885d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
30895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
30905d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
30915d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3092*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
30935d0a12d3SThurston Dang; CHECK:       2:
30945d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
30955d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
30965d0a12d3SThurston Dang; CHECK:       3:
30975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
30985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
30995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
31005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
31015d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8
3102*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> splat (i32 -1))
31034ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
3104*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> splat (i32 -1))
31055d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
31065d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
31075d0a12d3SThurston Dang;
31085d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
31095d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> %tmp1, <2 x i32> <i32 -1, i32 -1>)
31105d0a12d3SThurston Dang  ret <2 x i32> %tmp3
31115d0a12d3SThurston Dang}
31125d0a12d3SThurston Dang
31135d0a12d3SThurston Dangdefine <16 x i8> @srshr16b(ptr %A) nounwind sanitize_memory {
31145d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @srshr16b(
31155d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
31165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
31175d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
31185d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3119*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
31205d0a12d3SThurston Dang; CHECK:       2:
31215d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
31225d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
31235d0a12d3SThurston Dang; CHECK:       3:
31245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
31255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
31265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
31275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
31285d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP6]], align 16
3129*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> splat (i8 -1))
31304ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP7]], zeroinitializer
3131*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> splat (i8 -1))
31325d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
31335d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
31345d0a12d3SThurston Dang;
31355d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
31365d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> %tmp1, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
31375d0a12d3SThurston Dang  ret <16 x i8> %tmp3
31385d0a12d3SThurston Dang}
31395d0a12d3SThurston Dang
31405d0a12d3SThurston Dangdefine <8 x i16> @srshr8h(ptr %A) nounwind sanitize_memory {
31415d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @srshr8h(
31425d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
31435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
31445d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
31455d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3146*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
31475d0a12d3SThurston Dang; CHECK:       2:
31485d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
31495d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
31505d0a12d3SThurston Dang; CHECK:       3:
31515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
31525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
31535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
31545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
31555d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
3156*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> splat (i16 -1))
31574ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
3158*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> splat (i16 -1))
31595d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
31605d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
31615d0a12d3SThurston Dang;
31625d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
31635d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16> %tmp1, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>)
31645d0a12d3SThurston Dang  ret <8 x i16> %tmp3
31655d0a12d3SThurston Dang}
31665d0a12d3SThurston Dang
31675d0a12d3SThurston Dangdefine <4 x i32> @srshr4s(ptr %A) nounwind sanitize_memory {
31685d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @srshr4s(
31695d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
31705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
31715d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
31725d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3173*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
31745d0a12d3SThurston Dang; CHECK:       2:
31755d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
31765d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
31775d0a12d3SThurston Dang; CHECK:       3:
31785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
31795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
31805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
31815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
31825d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
3183*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> splat (i32 -1))
31844ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
3185*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> splat (i32 -1))
31865d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
31875d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
31885d0a12d3SThurston Dang;
31895d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
31905d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32> %tmp1, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>)
31915d0a12d3SThurston Dang  ret <4 x i32> %tmp3
31925d0a12d3SThurston Dang}
31935d0a12d3SThurston Dang
31945d0a12d3SThurston Dangdefine <2 x i64> @srshr2d(ptr %A) nounwind sanitize_memory {
31955d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @srshr2d(
31965d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
31975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
31985d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
31995d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3200*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
32015d0a12d3SThurston Dang; CHECK:       2:
32025d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
32035d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
32045d0a12d3SThurston Dang; CHECK:       3:
32055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
32065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
32075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
32085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
32095d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
3210*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> splat (i64 -1))
32114ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
3212*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> splat (i64 -1))
32135d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
32145d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
32155d0a12d3SThurston Dang;
32165d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
32175d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> %tmp1, <2 x i64> <i64 -1, i64 -1>)
32185d0a12d3SThurston Dang  ret <2 x i64> %tmp3
32195d0a12d3SThurston Dang}
32205d0a12d3SThurston Dang
32215d0a12d3SThurston Dangdefine <1 x i64> @srshr1d(ptr %A) nounwind sanitize_memory {
32225d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @srshr1d(
32235d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
32245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
32255d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
32265d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3227*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
32285d0a12d3SThurston Dang; CHECK:       2:
32295d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
32305d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
32315d0a12d3SThurston Dang; CHECK:       3:
32325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
32335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
32345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
32355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
32365d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP6]], align 8
3237*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> splat (i64 -1))
32384ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP7]], zeroinitializer
3239*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> splat (i64 -1))
32405d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
32415d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
32425d0a12d3SThurston Dang;
32435d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
32445d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 -1>)
32455d0a12d3SThurston Dang  ret <1 x i64> %tmp3
32465d0a12d3SThurston Dang}
32475d0a12d3SThurston Dang
32485d0a12d3SThurston Dangdefine i64 @srshr_scalar(ptr %A) nounwind sanitize_memory {
32495d0a12d3SThurston Dang; CHECK-LABEL: define i64 @srshr_scalar(
32505d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
32515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
32525d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
32535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3254*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
32555d0a12d3SThurston Dang; CHECK:       2:
32565d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
32575d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
32585d0a12d3SThurston Dang; CHECK:       3:
32595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
32605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
32615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
32625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
32635d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP6]], align 8
32644ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.srshl.i64(i64 [[_MSLD]], i64 -1)
32654ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP7]], 0
32665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.srshl.i64(i64 [[TMP1]], i64 -1)
32675d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
32685d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
32695d0a12d3SThurston Dang;
32705d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
32715d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.srshl.i64(i64 %tmp1, i64 -1)
32725d0a12d3SThurston Dang  ret i64 %tmp3
32735d0a12d3SThurston Dang}
32745d0a12d3SThurston Dang
32755d0a12d3SThurston Dangdefine <8 x i8> @sqshlu8b(ptr %A) nounwind sanitize_memory {
32765d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @sqshlu8b(
32775d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
32785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
32795d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
32805d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3281*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
32825d0a12d3SThurston Dang; CHECK:       2:
32835d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
32845d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
32855d0a12d3SThurston Dang; CHECK:       3:
32865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
32875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
32885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
32895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
32905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP6]], align 8
3291*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshlu.v8i8(<8 x i8> [[_MSLD]], <8 x i8> splat (i8 1))
32924ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
3293*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshlu.v8i8(<8 x i8> [[TMP1]], <8 x i8> splat (i8 1))
32945d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
32955d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
32965d0a12d3SThurston Dang;
32975d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
32985d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqshlu.v8i8(<8 x i8> %tmp1, <8 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
32995d0a12d3SThurston Dang  ret <8 x i8> %tmp3
33005d0a12d3SThurston Dang}
33015d0a12d3SThurston Dang
33025d0a12d3SThurston Dangdefine <4 x i16> @sqshlu4h(ptr %A) nounwind sanitize_memory {
33035d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @sqshlu4h(
33045d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
33055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
33065d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
33075d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3308*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
33095d0a12d3SThurston Dang; CHECK:       2:
33105d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
33115d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
33125d0a12d3SThurston Dang; CHECK:       3:
33135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
33145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
33155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
33165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
33175d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP6]], align 8
3318*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshlu.v4i16(<4 x i16> [[_MSLD]], <4 x i16> splat (i16 1))
33194ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
3320*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshlu.v4i16(<4 x i16> [[TMP1]], <4 x i16> splat (i16 1))
33215d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
33225d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
33235d0a12d3SThurston Dang;
33245d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
33255d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqshlu.v4i16(<4 x i16> %tmp1, <4 x i16> <i16 1, i16 1, i16 1, i16 1>)
33265d0a12d3SThurston Dang  ret <4 x i16> %tmp3
33275d0a12d3SThurston Dang}
33285d0a12d3SThurston Dang
33295d0a12d3SThurston Dangdefine <2 x i32> @sqshlu2s(ptr %A) nounwind sanitize_memory {
33305d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @sqshlu2s(
33315d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
33325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
33335d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
33345d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3335*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
33365d0a12d3SThurston Dang; CHECK:       2:
33375d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
33385d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
33395d0a12d3SThurston Dang; CHECK:       3:
33405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
33415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
33425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
33435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
33445d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8
3345*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshlu.v2i32(<2 x i32> [[_MSLD]], <2 x i32> splat (i32 1))
33464ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
3347*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshlu.v2i32(<2 x i32> [[TMP1]], <2 x i32> splat (i32 1))
33485d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
33495d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
33505d0a12d3SThurston Dang;
33515d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
33525d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqshlu.v2i32(<2 x i32> %tmp1, <2 x i32> <i32 1, i32 1>)
33535d0a12d3SThurston Dang  ret <2 x i32> %tmp3
33545d0a12d3SThurston Dang}
33555d0a12d3SThurston Dang
33565d0a12d3SThurston Dangdefine <16 x i8> @sqshlu16b(ptr %A) nounwind sanitize_memory {
33575d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @sqshlu16b(
33585d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
33595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
33605d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
33615d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3362*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
33635d0a12d3SThurston Dang; CHECK:       2:
33645d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
33655d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
33665d0a12d3SThurston Dang; CHECK:       3:
33675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
33685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
33695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
33705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
33715d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP6]], align 16
3372*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqshlu.v16i8(<16 x i8> [[_MSLD]], <16 x i8> splat (i8 1))
33734ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP7]], zeroinitializer
3374*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqshlu.v16i8(<16 x i8> [[TMP1]], <16 x i8> splat (i8 1))
33755d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
33765d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
33775d0a12d3SThurston Dang;
33785d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
33795d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.sqshlu.v16i8(<16 x i8> %tmp1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
33805d0a12d3SThurston Dang  ret <16 x i8> %tmp3
33815d0a12d3SThurston Dang}
33825d0a12d3SThurston Dang
33835d0a12d3SThurston Dangdefine <8 x i16> @sqshlu8h(ptr %A) nounwind sanitize_memory {
33845d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @sqshlu8h(
33855d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
33865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
33875d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
33885d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3389*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
33905d0a12d3SThurston Dang; CHECK:       2:
33915d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
33925d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
33935d0a12d3SThurston Dang; CHECK:       3:
33945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
33955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
33965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
33975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
33985d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
3399*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqshlu.v8i16(<8 x i16> [[_MSLD]], <8 x i16> splat (i16 1))
34004ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
3401*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqshlu.v8i16(<8 x i16> [[TMP1]], <8 x i16> splat (i16 1))
34025d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
34035d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
34045d0a12d3SThurston Dang;
34055d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
34065d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.sqshlu.v8i16(<8 x i16> %tmp1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
34075d0a12d3SThurston Dang  ret <8 x i16> %tmp3
34085d0a12d3SThurston Dang}
34095d0a12d3SThurston Dang
34105d0a12d3SThurston Dangdefine <4 x i32> @sqshlu4s(ptr %A) nounwind sanitize_memory {
34115d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @sqshlu4s(
34125d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
34135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
34145d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
34155d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3416*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
34175d0a12d3SThurston Dang; CHECK:       2:
34185d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
34195d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
34205d0a12d3SThurston Dang; CHECK:       3:
34215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
34225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
34235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
34245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
34255d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
3426*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqshlu.v4i32(<4 x i32> [[_MSLD]], <4 x i32> splat (i32 1))
34274ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
3428*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqshlu.v4i32(<4 x i32> [[TMP1]], <4 x i32> splat (i32 1))
34295d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
34305d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
34315d0a12d3SThurston Dang;
34325d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
34335d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.sqshlu.v4i32(<4 x i32> %tmp1, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
34345d0a12d3SThurston Dang  ret <4 x i32> %tmp3
34355d0a12d3SThurston Dang}
34365d0a12d3SThurston Dang
34375d0a12d3SThurston Dangdefine <2 x i64> @sqshlu2d(ptr %A) nounwind sanitize_memory {
34385d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @sqshlu2d(
34395d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
34405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
34415d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
34425d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3443*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
34445d0a12d3SThurston Dang; CHECK:       2:
34455d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
34465d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
34475d0a12d3SThurston Dang; CHECK:       3:
34485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
34495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
34505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
34515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
34525d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
3453*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> [[_MSLD]], <2 x i64> splat (i64 1))
34544ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
3455*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> [[TMP1]], <2 x i64> splat (i64 1))
34565d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
34575d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
34585d0a12d3SThurston Dang;
34595d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
34605d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> %tmp1, <2 x i64> <i64 1, i64 1>)
34615d0a12d3SThurston Dang  ret <2 x i64> %tmp3
34625d0a12d3SThurston Dang}
34635d0a12d3SThurston Dang
34645d0a12d3SThurston Dangdefine <1 x i64> @sqshlu1d_constant(ptr %A) nounwind sanitize_memory {
34655d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @sqshlu1d_constant(
34665d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
34675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
34685d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
34695d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3470*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
34715d0a12d3SThurston Dang; CHECK:       2:
34725d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
34735d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
34745d0a12d3SThurston Dang; CHECK:       3:
34755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
34765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
34775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
34785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
34795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP6]], align 8
3480*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <1 x i64> @llvm.aarch64.neon.sqshlu.v1i64(<1 x i64> [[_MSLD]], <1 x i64> splat (i64 1))
34814ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP7]], zeroinitializer
3482*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.sqshlu.v1i64(<1 x i64> [[TMP1]], <1 x i64> splat (i64 1))
34835d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
34845d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
34855d0a12d3SThurston Dang;
34865d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
34875d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.sqshlu.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 1>)
34885d0a12d3SThurston Dang  ret <1 x i64> %tmp3
34895d0a12d3SThurston Dang}
34905d0a12d3SThurston Dang
34915d0a12d3SThurston Dangdefine i64 @sqshlu_i64_constant(ptr %A) nounwind sanitize_memory {
34925d0a12d3SThurston Dang; CHECK-LABEL: define i64 @sqshlu_i64_constant(
34935d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
34945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
34955d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
34965d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3497*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
34985d0a12d3SThurston Dang; CHECK:       2:
34995d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
35005d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
35015d0a12d3SThurston Dang; CHECK:       3:
35025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
35035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
35045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
35055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
35065d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP6]], align 8
35074ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.sqshlu.i64(i64 [[_MSLD]], i64 1)
35084ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP7]], 0
35095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.sqshlu.i64(i64 [[TMP1]], i64 1)
35105d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP]], ptr @__msan_retval_tls, align 8
35115d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
35125d0a12d3SThurston Dang;
35135d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
35145d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.sqshlu.i64(i64 %tmp1, i64 1)
35155d0a12d3SThurston Dang  ret i64 %tmp3
35165d0a12d3SThurston Dang}
35175d0a12d3SThurston Dang
35185d0a12d3SThurston Dangdefine i32 @sqshlu_i32_constant(ptr %A) nounwind sanitize_memory {
35195d0a12d3SThurston Dang; CHECK-LABEL: define i32 @sqshlu_i32_constant(
35205d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
35215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
35225d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
35235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3524*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
35255d0a12d3SThurston Dang; CHECK:       2:
35265d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
35275d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
35285d0a12d3SThurston Dang; CHECK:       3:
35295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A]], align 4
35305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
35315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
35325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
35335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP6]], align 4
35344ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i32 @llvm.aarch64.neon.sqshlu.i32(i32 [[_MSLD]], i32 1)
35354ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i32 [[TMP7]], 0
35365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i32 @llvm.aarch64.neon.sqshlu.i32(i32 [[TMP1]], i32 1)
35375d0a12d3SThurston Dang; CHECK-NEXT:    store i32 [[_MSPROP]], ptr @__msan_retval_tls, align 8
35385d0a12d3SThurston Dang; CHECK-NEXT:    ret i32 [[TMP3]]
35395d0a12d3SThurston Dang;
35405d0a12d3SThurston Dang  %tmp1 = load i32, ptr %A
35415d0a12d3SThurston Dang  %tmp3 = call i32 @llvm.aarch64.neon.sqshlu.i32(i32 %tmp1, i32 1)
35425d0a12d3SThurston Dang  ret i32 %tmp3
35435d0a12d3SThurston Dang}
35445d0a12d3SThurston Dang
35455d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.sqshlu.v8i8(<8 x i8>, <8 x i8>) nounwind readnone
35465d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.sqshlu.v4i16(<4 x i16>, <4 x i16>) nounwind readnone
35475d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.sqshlu.v2i32(<2 x i32>, <2 x i32>) nounwind readnone
35485d0a12d3SThurston Dangdeclare <1 x i64> @llvm.aarch64.neon.sqshlu.v1i64(<1 x i64>, <1 x i64>) nounwind readnone
35495d0a12d3SThurston Dangdeclare i64 @llvm.aarch64.neon.sqshlu.i64(i64, i64) nounwind readnone
35505d0a12d3SThurston Dangdeclare i32 @llvm.aarch64.neon.sqshlu.i32(i32, i32) nounwind readnone
35515d0a12d3SThurston Dang
35525d0a12d3SThurston Dangdeclare <16 x i8> @llvm.aarch64.neon.sqshlu.v16i8(<16 x i8>, <16 x i8>) nounwind readnone
35535d0a12d3SThurston Dangdeclare <8 x i16> @llvm.aarch64.neon.sqshlu.v8i16(<8 x i16>, <8 x i16>) nounwind readnone
35545d0a12d3SThurston Dangdeclare <4 x i32> @llvm.aarch64.neon.sqshlu.v4i32(<4 x i32>, <4 x i32>) nounwind readnone
35555d0a12d3SThurston Dangdeclare <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64>, <2 x i64>) nounwind readnone
35565d0a12d3SThurston Dang
35575d0a12d3SThurston Dangdefine <8 x i8> @rshrn8b(ptr %A) nounwind sanitize_memory {
35585d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @rshrn8b(
35595d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
35605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
35615d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
35625d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3563*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
35645d0a12d3SThurston Dang; CHECK:       2:
35655d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
35665d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
35675d0a12d3SThurston Dang; CHECK:       3:
35685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
35695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
35705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
35715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
35725d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
35734ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.rshrn.v8i8(<8 x i16> [[_MSLD]], i32 1)
35744ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
35755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.rshrn.v8i8(<8 x i16> [[TMP1]], i32 1)
35764ce559d0SThurston Dang; CHECK-NEXT:    store <8 x i8> [[TMP8]], ptr @__msan_retval_tls, align 8
35775d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
35785d0a12d3SThurston Dang;
35795d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
35805d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.rshrn.v8i8(<8 x i16> %tmp1, i32 1)
35815d0a12d3SThurston Dang  ret <8 x i8> %tmp3
35825d0a12d3SThurston Dang}
35835d0a12d3SThurston Dang
35845d0a12d3SThurston Dangdefine <4 x i16> @rshrn4h(ptr %A) nounwind sanitize_memory {
35855d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @rshrn4h(
35865d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
35875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
35885d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
35895d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3590*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
35915d0a12d3SThurston Dang; CHECK:       2:
35925d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
35935d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
35945d0a12d3SThurston Dang; CHECK:       3:
35955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
35965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
35975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
35985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
35995d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
36004ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> [[_MSLD]], i32 1)
36014ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
36025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> [[TMP1]], i32 1)
36034ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i16> [[TMP8]], ptr @__msan_retval_tls, align 8
36045d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
36055d0a12d3SThurston Dang;
36065d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
36075d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> %tmp1, i32 1)
36085d0a12d3SThurston Dang  ret <4 x i16> %tmp3
36095d0a12d3SThurston Dang}
36105d0a12d3SThurston Dang
36115d0a12d3SThurston Dangdefine <2 x i32> @rshrn2s(ptr %A) nounwind sanitize_memory {
36125d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @rshrn2s(
36135d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
36145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
36155d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
36165d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3617*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
36185d0a12d3SThurston Dang; CHECK:       2:
36195d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
36205d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
36215d0a12d3SThurston Dang; CHECK:       3:
36225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
36235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
36245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
36255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
36265d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
36274ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.rshrn.v2i32(<2 x i64> [[_MSLD]], i32 1)
36284ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
36295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.rshrn.v2i32(<2 x i64> [[TMP1]], i32 1)
36304ce559d0SThurston Dang; CHECK-NEXT:    store <2 x i32> [[TMP8]], ptr @__msan_retval_tls, align 8
36315d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
36325d0a12d3SThurston Dang;
36335d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
36345d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.rshrn.v2i32(<2 x i64> %tmp1, i32 1)
36355d0a12d3SThurston Dang  ret <2 x i32> %tmp3
36365d0a12d3SThurston Dang}
36375d0a12d3SThurston Dang
36385d0a12d3SThurston Dangdefine <16 x i8> @rshrn16b(ptr %ret, ptr %A) nounwind sanitize_memory {
36395d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @rshrn16b(
36405d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
36415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
36425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
36435d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
36445d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3645*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
36465d0a12d3SThurston Dang; CHECK:       3:
36475d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
36485d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
36495d0a12d3SThurston Dang; CHECK:       4:
36505d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <8 x i8>, ptr [[RET]], align 8
36515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
36525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
36535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
36545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
36555d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
3656*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
36575d0a12d3SThurston Dang; CHECK:       8:
36585d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
36595d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
36605d0a12d3SThurston Dang; CHECK:       9:
36615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
36625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
36635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
36645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
36655d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
36664ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <8 x i8> @llvm.aarch64.neon.rshrn.v8i8(<8 x i16> [[_MSLD1]], i32 1)
36674ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i8> [[TMP13]], zeroinitializer
36685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.rshrn.v8i8(<8 x i16> [[TMP1]], i32 1)
36694ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <8 x i8> [[_MSLD]], <8 x i8> [[TMP14]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
36705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i8> [[OUT]], <8 x i8> [[TMP3]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
36715d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
36725d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP4]]
36735d0a12d3SThurston Dang;
36745d0a12d3SThurston Dang  %out = load <8 x i8>, ptr %ret
36755d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
36765d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.rshrn.v8i8(<8 x i16> %tmp1, i32 1)
36775d0a12d3SThurston Dang  %tmp4 = shufflevector <8 x i8> %out, <8 x i8> %tmp3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
36785d0a12d3SThurston Dang  ret <16 x i8> %tmp4
36795d0a12d3SThurston Dang}
36805d0a12d3SThurston Dang
36815d0a12d3SThurston Dangdefine <8 x i16> @rshrn8h(ptr %ret, ptr %A) nounwind sanitize_memory {
36825d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @rshrn8h(
36835d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
36845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
36855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
36865d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
36875d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3688*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
36895d0a12d3SThurston Dang; CHECK:       3:
36905d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
36915d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
36925d0a12d3SThurston Dang; CHECK:       4:
36935d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <4 x i16>, ptr [[RET]], align 8
36945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
36955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
36965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
36975d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
36985d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
3699*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
37005d0a12d3SThurston Dang; CHECK:       8:
37015d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
37025d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
37035d0a12d3SThurston Dang; CHECK:       9:
37045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
37055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
37065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
37075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
37085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
37094ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> [[_MSLD1]], i32 1)
37104ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i16> [[TMP13]], zeroinitializer
37115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> [[TMP1]], i32 1)
37124ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <4 x i16> [[_MSLD]], <4 x i16> [[TMP14]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
37135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <4 x i16> [[OUT]], <4 x i16> [[TMP3]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
37145d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
37155d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP4]]
37165d0a12d3SThurston Dang;
37175d0a12d3SThurston Dang  %out = load <4 x i16>, ptr %ret
37185d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
37195d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> %tmp1, i32 1)
37205d0a12d3SThurston Dang  %tmp4 = shufflevector <4 x i16> %out, <4 x i16> %tmp3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
37215d0a12d3SThurston Dang  ret <8 x i16> %tmp4
37225d0a12d3SThurston Dang}
37235d0a12d3SThurston Dang
37245d0a12d3SThurston Dangdefine <4 x i32> @rshrn4s(ptr %ret, ptr %A) nounwind sanitize_memory {
37255d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @rshrn4s(
37265d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
37275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
37285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
37295d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
37305d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3731*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
37325d0a12d3SThurston Dang; CHECK:       3:
37335d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
37345d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
37355d0a12d3SThurston Dang; CHECK:       4:
37365d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <2 x i32>, ptr [[RET]], align 8
37375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
37385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
37395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
37405d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
37415d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
3742*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
37435d0a12d3SThurston Dang; CHECK:       8:
37445d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
37455d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
37465d0a12d3SThurston Dang; CHECK:       9:
37475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
37485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
37495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
37505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
37515d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
37524ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <2 x i32> @llvm.aarch64.neon.rshrn.v2i32(<2 x i64> [[_MSLD1]], i32 1)
37534ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i32> [[TMP13]], zeroinitializer
37545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.rshrn.v2i32(<2 x i64> [[TMP1]], i32 1)
37554ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <2 x i32> [[_MSLD]], <2 x i32> [[TMP14]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
37565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <2 x i32> [[OUT]], <2 x i32> [[TMP3]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
37575d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
37585d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP4]]
37595d0a12d3SThurston Dang;
37605d0a12d3SThurston Dang  %out = load <2 x i32>, ptr %ret
37615d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
37625d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.rshrn.v2i32(<2 x i64> %tmp1, i32 1)
37635d0a12d3SThurston Dang  %tmp4 = shufflevector <2 x i32> %out, <2 x i32> %tmp3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
37645d0a12d3SThurston Dang  ret <4 x i32> %tmp4
37655d0a12d3SThurston Dang}
37665d0a12d3SThurston Dang
37675d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.rshrn.v8i8(<8 x i16>, i32) nounwind readnone
37685d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32>, i32) nounwind readnone
37695d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.rshrn.v2i32(<2 x i64>, i32) nounwind readnone
37705d0a12d3SThurston Dang
37715d0a12d3SThurston Dangdefine <8 x i8> @shrn8b(ptr %A) nounwind sanitize_memory {
37725d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @shrn8b(
37735d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
37745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
37755d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
37765d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3777*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
37785d0a12d3SThurston Dang; CHECK:       2:
37795d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
37805d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
37815d0a12d3SThurston Dang; CHECK:       3:
37825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
37835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
37845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
37855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
37865d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
3787*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = lshr <8 x i16> [[_MSLD]], splat (i16 1)
37885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
3789*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP2:%.*]] = lshr <8 x i16> [[TMP1]], splat (i16 1)
37905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = trunc <8 x i16> [[TMP8]] to <8 x i8>
37915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = trunc <8 x i16> [[TMP2]] to <8 x i8>
37925d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
37935d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
37945d0a12d3SThurston Dang;
37955d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
37965d0a12d3SThurston Dang  %tmp2 = lshr <8 x i16> %tmp1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
37975d0a12d3SThurston Dang  %tmp3 = trunc <8 x i16> %tmp2 to <8 x i8>
37985d0a12d3SThurston Dang  ret <8 x i8> %tmp3
37995d0a12d3SThurston Dang}
38005d0a12d3SThurston Dang
38015d0a12d3SThurston Dangdefine <4 x i16> @shrn4h(ptr %A) nounwind sanitize_memory {
38025d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @shrn4h(
38035d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
38045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
38055d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
38065d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3807*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
38085d0a12d3SThurston Dang; CHECK:       2:
38095d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
38105d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
38115d0a12d3SThurston Dang; CHECK:       3:
38125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
38135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
38145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
38155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
38165d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
3817*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = lshr <4 x i32> [[_MSLD]], splat (i32 1)
38185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
3819*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP2:%.*]] = lshr <4 x i32> [[TMP1]], splat (i32 1)
38205d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = trunc <4 x i32> [[TMP8]] to <4 x i16>
38215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = trunc <4 x i32> [[TMP2]] to <4 x i16>
38225d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
38235d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
38245d0a12d3SThurston Dang;
38255d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
38265d0a12d3SThurston Dang  %tmp2 = lshr <4 x i32> %tmp1, <i32 1, i32 1, i32 1, i32 1>
38275d0a12d3SThurston Dang  %tmp3 = trunc <4 x i32> %tmp2 to <4 x i16>
38285d0a12d3SThurston Dang  ret <4 x i16> %tmp3
38295d0a12d3SThurston Dang}
38305d0a12d3SThurston Dang
38315d0a12d3SThurston Dangdefine <2 x i32> @shrn2s(ptr %A) nounwind sanitize_memory {
38325d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @shrn2s(
38335d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
38345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
38355d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
38365d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3837*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
38385d0a12d3SThurston Dang; CHECK:       2:
38395d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
38405d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
38415d0a12d3SThurston Dang; CHECK:       3:
38425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
38435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
38445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
38455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
38465d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
3847*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = lshr <2 x i64> [[_MSLD]], splat (i64 1)
38485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
3849*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP2:%.*]] = lshr <2 x i64> [[TMP1]], splat (i64 1)
38505d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = trunc <2 x i64> [[TMP8]] to <2 x i32>
38515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = trunc <2 x i64> [[TMP2]] to <2 x i32>
38525d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
38535d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
38545d0a12d3SThurston Dang;
38555d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
38565d0a12d3SThurston Dang  %tmp2 = lshr <2 x i64> %tmp1, <i64 1, i64 1>
38575d0a12d3SThurston Dang  %tmp3 = trunc <2 x i64> %tmp2 to <2 x i32>
38585d0a12d3SThurston Dang  ret <2 x i32> %tmp3
38595d0a12d3SThurston Dang}
38605d0a12d3SThurston Dang
38615d0a12d3SThurston Dangdefine <16 x i8> @shrn16b(ptr %ret, ptr %A) nounwind sanitize_memory {
38625d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @shrn16b(
38635d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
38645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
38655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
38665d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
38675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3868*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
38695d0a12d3SThurston Dang; CHECK:       3:
38705d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
38715d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
38725d0a12d3SThurston Dang; CHECK:       4:
38735d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <8 x i8>, ptr [[RET]], align 8
38745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
38755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
38765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
38775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
38785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
3879*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
38805d0a12d3SThurston Dang; CHECK:       8:
38815d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
38825d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
38835d0a12d3SThurston Dang; CHECK:       9:
38845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
38855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
38865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
38875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
38885d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
3889*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = lshr <8 x i16> [[_MSLD1]], splat (i16 1)
38905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i16> [[TMP13]], zeroinitializer
3891*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP2:%.*]] = lshr <8 x i16> [[TMP1]], splat (i16 1)
38925d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = trunc <8 x i16> [[TMP14]] to <8 x i8>
38935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = trunc <8 x i16> [[TMP2]] to <8 x i8>
38945d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = shufflevector <8 x i8> [[_MSLD]], <8 x i8> [[_MSPROP]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
38955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i8> [[OUT]], <8 x i8> [[TMP3]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
38965d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
38975d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP4]]
38985d0a12d3SThurston Dang;
38995d0a12d3SThurston Dang  %out = load <8 x i8>, ptr %ret
39005d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
39015d0a12d3SThurston Dang  %tmp2 = lshr <8 x i16> %tmp1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
39025d0a12d3SThurston Dang  %tmp3 = trunc <8 x i16> %tmp2 to <8 x i8>
39035d0a12d3SThurston Dang  %tmp4 = shufflevector <8 x i8> %out, <8 x i8> %tmp3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
39045d0a12d3SThurston Dang  ret <16 x i8> %tmp4
39055d0a12d3SThurston Dang}
39065d0a12d3SThurston Dang
39075d0a12d3SThurston Dangdefine <8 x i16> @shrn8h(ptr %ret, ptr %A) nounwind sanitize_memory {
39085d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @shrn8h(
39095d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
39105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
39115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
39125d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
39135d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3914*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
39155d0a12d3SThurston Dang; CHECK:       3:
39165d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
39175d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
39185d0a12d3SThurston Dang; CHECK:       4:
39195d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <4 x i16>, ptr [[RET]], align 8
39205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
39215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
39225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
39235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
39245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
3925*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
39265d0a12d3SThurston Dang; CHECK:       8:
39275d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
39285d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
39295d0a12d3SThurston Dang; CHECK:       9:
39305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
39315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
39325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
39335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
39345d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
3935*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = lshr <4 x i32> [[_MSLD1]], splat (i32 1)
39365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i32> [[TMP13]], zeroinitializer
3937*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP2:%.*]] = lshr <4 x i32> [[TMP1]], splat (i32 1)
39385d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = trunc <4 x i32> [[TMP14]] to <4 x i16>
39395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = trunc <4 x i32> [[TMP2]] to <4 x i16>
39405d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = shufflevector <4 x i16> [[_MSLD]], <4 x i16> [[_MSPROP]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
39415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <4 x i16> [[OUT]], <4 x i16> [[TMP3]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
39425d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
39435d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP4]]
39445d0a12d3SThurston Dang;
39455d0a12d3SThurston Dang  %out = load <4 x i16>, ptr %ret
39465d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
39475d0a12d3SThurston Dang  %tmp2 = lshr <4 x i32> %tmp1, <i32 1, i32 1, i32 1, i32 1>
39485d0a12d3SThurston Dang  %tmp3 = trunc <4 x i32> %tmp2 to <4 x i16>
39495d0a12d3SThurston Dang  %tmp4 = shufflevector <4 x i16> %out, <4 x i16> %tmp3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
39505d0a12d3SThurston Dang  ret <8 x i16> %tmp4
39515d0a12d3SThurston Dang}
39525d0a12d3SThurston Dang
39535d0a12d3SThurston Dangdefine <4 x i32> @shrn4s(ptr %ret, ptr %A) nounwind sanitize_memory {
39545d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @shrn4s(
39555d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
39565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
39575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
39585d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
39595d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
3960*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
39615d0a12d3SThurston Dang; CHECK:       3:
39625d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
39635d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
39645d0a12d3SThurston Dang; CHECK:       4:
39655d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <2 x i32>, ptr [[RET]], align 8
39665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
39675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
39685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
39695d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
39705d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
3971*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
39725d0a12d3SThurston Dang; CHECK:       8:
39735d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
39745d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
39755d0a12d3SThurston Dang; CHECK:       9:
39765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
39775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
39785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
39795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
39805d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
3981*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = lshr <2 x i64> [[_MSLD1]], splat (i64 1)
39825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i64> [[TMP13]], zeroinitializer
3983*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP2:%.*]] = lshr <2 x i64> [[TMP1]], splat (i64 1)
39845d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = trunc <2 x i64> [[TMP14]] to <2 x i32>
39855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = trunc <2 x i64> [[TMP2]] to <2 x i32>
39865d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = shufflevector <2 x i32> [[_MSLD]], <2 x i32> [[_MSPROP]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
39875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <2 x i32> [[OUT]], <2 x i32> [[TMP3]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
39885d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
39895d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP4]]
39905d0a12d3SThurston Dang;
39915d0a12d3SThurston Dang  %out = load <2 x i32>, ptr %ret
39925d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
39935d0a12d3SThurston Dang  %tmp2 = lshr <2 x i64> %tmp1, <i64 1, i64 1>
39945d0a12d3SThurston Dang  %tmp3 = trunc <2 x i64> %tmp2 to <2 x i32>
39955d0a12d3SThurston Dang  %tmp4 = shufflevector <2 x i32> %out, <2 x i32> %tmp3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
39965d0a12d3SThurston Dang  ret <4 x i32> %tmp4
39975d0a12d3SThurston Dang}
39985d0a12d3SThurston Dang
39995d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.shrn.v8i8(<8 x i16>, i32) nounwind readnone
40005d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.shrn.v4i16(<4 x i32>, i32) nounwind readnone
40015d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.shrn.v2i32(<2 x i64>, i32) nounwind readnone
40025d0a12d3SThurston Dang
40035d0a12d3SThurston Dangdefine i32 @sqshrn1s(i64 %A) nounwind sanitize_memory {
40045d0a12d3SThurston Dang; CHECK-LABEL: define i32 @sqshrn1s(
40055d0a12d3SThurston Dang; CHECK-SAME: i64 [[A:%.*]]) #[[ATTR0]] {
40065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
40075d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
40084ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @llvm.aarch64.neon.sqshrn.i32(i64 [[TMP1]], i32 1)
40094ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = or i32 [[TMP2]], 0
40105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP:%.*]] = call i32 @llvm.aarch64.neon.sqshrn.i32(i64 [[A]], i32 1)
40114ce559d0SThurston Dang; CHECK-NEXT:    store i32 [[TMP3]], ptr @__msan_retval_tls, align 8
40125d0a12d3SThurston Dang; CHECK-NEXT:    ret i32 [[TMP]]
40135d0a12d3SThurston Dang;
40145d0a12d3SThurston Dang  %tmp = call i32 @llvm.aarch64.neon.sqshrn.i32(i64 %A, i32 1)
40155d0a12d3SThurston Dang  ret i32 %tmp
40165d0a12d3SThurston Dang}
40175d0a12d3SThurston Dang
40185d0a12d3SThurston Dangdefine <8 x i8> @sqshrn8b(ptr %A) nounwind sanitize_memory {
40195d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @sqshrn8b(
40205d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
40215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
40225d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
40235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4024*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
40255d0a12d3SThurston Dang; CHECK:       2:
40265d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
40275d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
40285d0a12d3SThurston Dang; CHECK:       3:
40295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
40305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
40315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
40325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
40335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
40344ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16> [[_MSLD]], i32 1)
40354ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
40365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16> [[TMP1]], i32 1)
40374ce559d0SThurston Dang; CHECK-NEXT:    store <8 x i8> [[TMP8]], ptr @__msan_retval_tls, align 8
40385d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
40395d0a12d3SThurston Dang;
40405d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
40415d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16> %tmp1, i32 1)
40425d0a12d3SThurston Dang  ret <8 x i8> %tmp3
40435d0a12d3SThurston Dang}
40445d0a12d3SThurston Dang
40455d0a12d3SThurston Dangdefine <4 x i16> @sqshrn4h(ptr %A) nounwind sanitize_memory {
40465d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @sqshrn4h(
40475d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
40485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
40495d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
40505d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4051*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
40525d0a12d3SThurston Dang; CHECK:       2:
40535d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
40545d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
40555d0a12d3SThurston Dang; CHECK:       3:
40565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
40575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
40585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
40595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
40605d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
40614ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32> [[_MSLD]], i32 1)
40624ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
40635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32> [[TMP1]], i32 1)
40644ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i16> [[TMP8]], ptr @__msan_retval_tls, align 8
40655d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
40665d0a12d3SThurston Dang;
40675d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
40685d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32> %tmp1, i32 1)
40695d0a12d3SThurston Dang  ret <4 x i16> %tmp3
40705d0a12d3SThurston Dang}
40715d0a12d3SThurston Dang
40725d0a12d3SThurston Dangdefine <2 x i32> @sqshrn2s(ptr %A) nounwind sanitize_memory {
40735d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @sqshrn2s(
40745d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
40755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
40765d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
40775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4078*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
40795d0a12d3SThurston Dang; CHECK:       2:
40805d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
40815d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
40825d0a12d3SThurston Dang; CHECK:       3:
40835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
40845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
40855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
40865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
40875d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
40884ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64> [[_MSLD]], i32 1)
40894ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
40905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64> [[TMP1]], i32 1)
40914ce559d0SThurston Dang; CHECK-NEXT:    store <2 x i32> [[TMP8]], ptr @__msan_retval_tls, align 8
40925d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
40935d0a12d3SThurston Dang;
40945d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
40955d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64> %tmp1, i32 1)
40965d0a12d3SThurston Dang  ret <2 x i32> %tmp3
40975d0a12d3SThurston Dang}
40985d0a12d3SThurston Dang
40995d0a12d3SThurston Dang
41005d0a12d3SThurston Dangdefine <16 x i8> @sqshrn16b(ptr %ret, ptr %A) nounwind sanitize_memory {
41015d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @sqshrn16b(
41025d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
41035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
41045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
41055d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
41065d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4107*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
41085d0a12d3SThurston Dang; CHECK:       3:
41095d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
41105d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
41115d0a12d3SThurston Dang; CHECK:       4:
41125d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <8 x i8>, ptr [[RET]], align 8
41135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
41145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
41155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
41165d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
41175d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4118*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
41195d0a12d3SThurston Dang; CHECK:       8:
41205d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
41215d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
41225d0a12d3SThurston Dang; CHECK:       9:
41235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
41245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
41255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
41265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
41275d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
41284ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16> [[_MSLD1]], i32 1)
41294ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i8> [[TMP13]], zeroinitializer
41305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16> [[TMP1]], i32 1)
41314ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <8 x i8> [[_MSLD]], <8 x i8> [[TMP14]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
41325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i8> [[OUT]], <8 x i8> [[TMP3]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
41335d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
41345d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP4]]
41355d0a12d3SThurston Dang;
41365d0a12d3SThurston Dang  %out = load <8 x i8>, ptr %ret
41375d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
41385d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16> %tmp1, i32 1)
41395d0a12d3SThurston Dang  %tmp4 = shufflevector <8 x i8> %out, <8 x i8> %tmp3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
41405d0a12d3SThurston Dang  ret <16 x i8> %tmp4
41415d0a12d3SThurston Dang}
41425d0a12d3SThurston Dang
41435d0a12d3SThurston Dangdefine <8 x i16> @sqshrn8h(ptr %ret, ptr %A) nounwind sanitize_memory {
41445d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @sqshrn8h(
41455d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
41465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
41475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
41485d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
41495d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4150*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
41515d0a12d3SThurston Dang; CHECK:       3:
41525d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
41535d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
41545d0a12d3SThurston Dang; CHECK:       4:
41555d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <4 x i16>, ptr [[RET]], align 8
41565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
41575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
41585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
41595d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
41605d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4161*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
41625d0a12d3SThurston Dang; CHECK:       8:
41635d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
41645d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
41655d0a12d3SThurston Dang; CHECK:       9:
41665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
41675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
41685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
41695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
41705d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
41714ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32> [[_MSLD1]], i32 1)
41724ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i16> [[TMP13]], zeroinitializer
41735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32> [[TMP1]], i32 1)
41744ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <4 x i16> [[_MSLD]], <4 x i16> [[TMP14]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
41755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <4 x i16> [[OUT]], <4 x i16> [[TMP3]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
41765d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
41775d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP4]]
41785d0a12d3SThurston Dang;
41795d0a12d3SThurston Dang  %out = load <4 x i16>, ptr %ret
41805d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
41815d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32> %tmp1, i32 1)
41825d0a12d3SThurston Dang  %tmp4 = shufflevector <4 x i16> %out, <4 x i16> %tmp3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
41835d0a12d3SThurston Dang  ret <8 x i16> %tmp4
41845d0a12d3SThurston Dang}
41855d0a12d3SThurston Dang
41865d0a12d3SThurston Dangdefine <4 x i32> @sqshrn4s(ptr %ret, ptr %A) nounwind sanitize_memory {
41875d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @sqshrn4s(
41885d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
41895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
41905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
41915d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
41925d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4193*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
41945d0a12d3SThurston Dang; CHECK:       3:
41955d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
41965d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
41975d0a12d3SThurston Dang; CHECK:       4:
41985d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <2 x i32>, ptr [[RET]], align 8
41995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
42005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
42015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
42025d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
42035d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4204*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
42055d0a12d3SThurston Dang; CHECK:       8:
42065d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
42075d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
42085d0a12d3SThurston Dang; CHECK:       9:
42095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
42105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
42115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
42125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
42135d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
42144ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64> [[_MSLD1]], i32 1)
42154ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i32> [[TMP13]], zeroinitializer
42165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64> [[TMP1]], i32 1)
42174ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <2 x i32> [[_MSLD]], <2 x i32> [[TMP14]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
42185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <2 x i32> [[OUT]], <2 x i32> [[TMP3]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
42195d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
42205d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP4]]
42215d0a12d3SThurston Dang;
42225d0a12d3SThurston Dang  %out = load <2 x i32>, ptr %ret
42235d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
42245d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64> %tmp1, i32 1)
42255d0a12d3SThurston Dang  %tmp4 = shufflevector <2 x i32> %out, <2 x i32> %tmp3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
42265d0a12d3SThurston Dang  ret <4 x i32> %tmp4
42275d0a12d3SThurston Dang}
42285d0a12d3SThurston Dang
42295d0a12d3SThurston Dangdeclare i32  @llvm.aarch64.neon.sqshrn.i32(i64, i32) nounwind readnone
42305d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16>, i32) nounwind readnone
42315d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32>, i32) nounwind readnone
42325d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64>, i32) nounwind readnone
42335d0a12d3SThurston Dang
42345d0a12d3SThurston Dangdefine i32 @sqshrun1s(i64 %A) nounwind sanitize_memory {
42355d0a12d3SThurston Dang; CHECK-LABEL: define i32 @sqshrun1s(
42365d0a12d3SThurston Dang; CHECK-SAME: i64 [[A:%.*]]) #[[ATTR0]] {
42375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
42385d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
42394ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @llvm.aarch64.neon.sqshrun.i32(i64 [[TMP1]], i32 1)
42404ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = or i32 [[TMP2]], 0
42415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP:%.*]] = call i32 @llvm.aarch64.neon.sqshrun.i32(i64 [[A]], i32 1)
42424ce559d0SThurston Dang; CHECK-NEXT:    store i32 [[TMP3]], ptr @__msan_retval_tls, align 8
42435d0a12d3SThurston Dang; CHECK-NEXT:    ret i32 [[TMP]]
42445d0a12d3SThurston Dang;
42455d0a12d3SThurston Dang  %tmp = call i32 @llvm.aarch64.neon.sqshrun.i32(i64 %A, i32 1)
42465d0a12d3SThurston Dang  ret i32 %tmp
42475d0a12d3SThurston Dang}
42485d0a12d3SThurston Dang
42495d0a12d3SThurston Dangdefine <8 x i8> @sqshrun8b(ptr %A) nounwind sanitize_memory {
42505d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @sqshrun8b(
42515d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
42525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
42535d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
42545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4255*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
42565d0a12d3SThurston Dang; CHECK:       2:
42575d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
42585d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
42595d0a12d3SThurston Dang; CHECK:       3:
42605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
42615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
42625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
42635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
42645d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
42654ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16> [[_MSLD]], i32 1)
42664ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
42675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16> [[TMP1]], i32 1)
42684ce559d0SThurston Dang; CHECK-NEXT:    store <8 x i8> [[TMP8]], ptr @__msan_retval_tls, align 8
42695d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
42705d0a12d3SThurston Dang;
42715d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
42725d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16> %tmp1, i32 1)
42735d0a12d3SThurston Dang  ret <8 x i8> %tmp3
42745d0a12d3SThurston Dang}
42755d0a12d3SThurston Dang
42765d0a12d3SThurston Dangdefine <4 x i16> @sqshrun4h(ptr %A) nounwind sanitize_memory {
42775d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @sqshrun4h(
42785d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
42795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
42805d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
42815d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4282*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
42835d0a12d3SThurston Dang; CHECK:       2:
42845d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
42855d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
42865d0a12d3SThurston Dang; CHECK:       3:
42875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
42885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
42895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
42905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
42915d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
42924ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32> [[_MSLD]], i32 1)
42934ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
42945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32> [[TMP1]], i32 1)
42954ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i16> [[TMP8]], ptr @__msan_retval_tls, align 8
42965d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
42975d0a12d3SThurston Dang;
42985d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
42995d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32> %tmp1, i32 1)
43005d0a12d3SThurston Dang  ret <4 x i16> %tmp3
43015d0a12d3SThurston Dang}
43025d0a12d3SThurston Dang
43035d0a12d3SThurston Dangdefine <2 x i32> @sqshrun2s(ptr %A) nounwind sanitize_memory {
43045d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @sqshrun2s(
43055d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
43065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
43075d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
43085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4309*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
43105d0a12d3SThurston Dang; CHECK:       2:
43115d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
43125d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
43135d0a12d3SThurston Dang; CHECK:       3:
43145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
43155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
43165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
43175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
43185d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
43194ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64> [[_MSLD]], i32 1)
43204ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
43215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64> [[TMP1]], i32 1)
43224ce559d0SThurston Dang; CHECK-NEXT:    store <2 x i32> [[TMP8]], ptr @__msan_retval_tls, align 8
43235d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
43245d0a12d3SThurston Dang;
43255d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
43265d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64> %tmp1, i32 1)
43275d0a12d3SThurston Dang  ret <2 x i32> %tmp3
43285d0a12d3SThurston Dang}
43295d0a12d3SThurston Dang
43305d0a12d3SThurston Dangdefine <16 x i8> @sqshrun16b(ptr %ret, ptr %A) nounwind sanitize_memory {
43315d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @sqshrun16b(
43325d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
43335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
43345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
43355d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
43365d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4337*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
43385d0a12d3SThurston Dang; CHECK:       3:
43395d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
43405d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
43415d0a12d3SThurston Dang; CHECK:       4:
43425d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <8 x i8>, ptr [[RET]], align 8
43435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
43445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
43455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
43465d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
43475d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4348*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
43495d0a12d3SThurston Dang; CHECK:       8:
43505d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
43515d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
43525d0a12d3SThurston Dang; CHECK:       9:
43535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
43545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
43555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
43565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
43575d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
43584ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16> [[_MSLD1]], i32 1)
43594ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i8> [[TMP13]], zeroinitializer
43605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16> [[TMP1]], i32 1)
43614ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <8 x i8> [[_MSLD]], <8 x i8> [[TMP14]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
43625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i8> [[OUT]], <8 x i8> [[TMP3]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
43635d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
43645d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP4]]
43655d0a12d3SThurston Dang;
43665d0a12d3SThurston Dang  %out = load <8 x i8>, ptr %ret
43675d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
43685d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16> %tmp1, i32 1)
43695d0a12d3SThurston Dang  %tmp4 = shufflevector <8 x i8> %out, <8 x i8> %tmp3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
43705d0a12d3SThurston Dang  ret <16 x i8> %tmp4
43715d0a12d3SThurston Dang}
43725d0a12d3SThurston Dang
43735d0a12d3SThurston Dangdefine <8 x i16> @sqshrun8h(ptr %ret, ptr %A) nounwind sanitize_memory {
43745d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @sqshrun8h(
43755d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
43765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
43775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
43785d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
43795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4380*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
43815d0a12d3SThurston Dang; CHECK:       3:
43825d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
43835d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
43845d0a12d3SThurston Dang; CHECK:       4:
43855d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <4 x i16>, ptr [[RET]], align 8
43865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
43875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
43885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
43895d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
43905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4391*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
43925d0a12d3SThurston Dang; CHECK:       8:
43935d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
43945d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
43955d0a12d3SThurston Dang; CHECK:       9:
43965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
43975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
43985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
43995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
44005d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
44014ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32> [[_MSLD1]], i32 1)
44024ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i16> [[TMP13]], zeroinitializer
44035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32> [[TMP1]], i32 1)
44044ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <4 x i16> [[_MSLD]], <4 x i16> [[TMP14]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
44055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <4 x i16> [[OUT]], <4 x i16> [[TMP3]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
44065d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
44075d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP4]]
44085d0a12d3SThurston Dang;
44095d0a12d3SThurston Dang  %out = load <4 x i16>, ptr %ret
44105d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
44115d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32> %tmp1, i32 1)
44125d0a12d3SThurston Dang  %tmp4 = shufflevector <4 x i16> %out, <4 x i16> %tmp3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
44135d0a12d3SThurston Dang  ret <8 x i16> %tmp4
44145d0a12d3SThurston Dang}
44155d0a12d3SThurston Dang
44165d0a12d3SThurston Dangdefine <4 x i32> @sqshrun4s(ptr %ret, ptr %A) nounwind sanitize_memory {
44175d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @sqshrun4s(
44185d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
44195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
44205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
44215d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
44225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4423*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
44245d0a12d3SThurston Dang; CHECK:       3:
44255d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
44265d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
44275d0a12d3SThurston Dang; CHECK:       4:
44285d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <2 x i32>, ptr [[RET]], align 8
44295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
44305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
44315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
44325d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
44335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4434*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
44355d0a12d3SThurston Dang; CHECK:       8:
44365d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
44375d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
44385d0a12d3SThurston Dang; CHECK:       9:
44395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
44405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
44415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
44425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
44435d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
44444ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64> [[_MSLD1]], i32 1)
44454ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i32> [[TMP13]], zeroinitializer
44465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64> [[TMP1]], i32 1)
44474ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <2 x i32> [[_MSLD]], <2 x i32> [[TMP14]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
44485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <2 x i32> [[OUT]], <2 x i32> [[TMP3]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
44495d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
44505d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP4]]
44515d0a12d3SThurston Dang;
44525d0a12d3SThurston Dang  %out = load <2 x i32>, ptr %ret
44535d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
44545d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64> %tmp1, i32 1)
44555d0a12d3SThurston Dang  %tmp4 = shufflevector <2 x i32> %out, <2 x i32> %tmp3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
44565d0a12d3SThurston Dang  ret <4 x i32> %tmp4
44575d0a12d3SThurston Dang}
44585d0a12d3SThurston Dang
44595d0a12d3SThurston Dangdeclare i32  @llvm.aarch64.neon.sqshrun.i32(i64, i32) nounwind readnone
44605d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16>, i32) nounwind readnone
44615d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32>, i32) nounwind readnone
44625d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64>, i32) nounwind readnone
44635d0a12d3SThurston Dang
44645d0a12d3SThurston Dangdefine i32 @sqrshrn1s(i64 %A) nounwind sanitize_memory {
44655d0a12d3SThurston Dang; CHECK-LABEL: define i32 @sqrshrn1s(
44665d0a12d3SThurston Dang; CHECK-SAME: i64 [[A:%.*]]) #[[ATTR0]] {
44675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
44685d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
44694ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @llvm.aarch64.neon.sqrshrn.i32(i64 [[TMP1]], i32 1)
44704ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = or i32 [[TMP2]], 0
44715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP:%.*]] = call i32 @llvm.aarch64.neon.sqrshrn.i32(i64 [[A]], i32 1)
44724ce559d0SThurston Dang; CHECK-NEXT:    store i32 [[TMP3]], ptr @__msan_retval_tls, align 8
44735d0a12d3SThurston Dang; CHECK-NEXT:    ret i32 [[TMP]]
44745d0a12d3SThurston Dang;
44755d0a12d3SThurston Dang  %tmp = call i32 @llvm.aarch64.neon.sqrshrn.i32(i64 %A, i32 1)
44765d0a12d3SThurston Dang  ret i32 %tmp
44775d0a12d3SThurston Dang}
44785d0a12d3SThurston Dang
44795d0a12d3SThurston Dangdefine <8 x i8> @sqrshrn8b(ptr %A) nounwind sanitize_memory {
44805d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @sqrshrn8b(
44815d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
44825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
44835d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
44845d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4485*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
44865d0a12d3SThurston Dang; CHECK:       2:
44875d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
44885d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
44895d0a12d3SThurston Dang; CHECK:       3:
44905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
44915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
44925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
44935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
44945d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
44954ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16> [[_MSLD]], i32 1)
44964ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
44975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16> [[TMP1]], i32 1)
44984ce559d0SThurston Dang; CHECK-NEXT:    store <8 x i8> [[TMP8]], ptr @__msan_retval_tls, align 8
44995d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
45005d0a12d3SThurston Dang;
45015d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
45025d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16> %tmp1, i32 1)
45035d0a12d3SThurston Dang  ret <8 x i8> %tmp3
45045d0a12d3SThurston Dang}
45055d0a12d3SThurston Dang
45065d0a12d3SThurston Dangdefine <4 x i16> @sqrshrn4h(ptr %A) nounwind sanitize_memory {
45075d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @sqrshrn4h(
45085d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
45095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
45105d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
45115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4512*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
45135d0a12d3SThurston Dang; CHECK:       2:
45145d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
45155d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
45165d0a12d3SThurston Dang; CHECK:       3:
45175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
45185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
45195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
45205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
45215d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
45224ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32> [[_MSLD]], i32 1)
45234ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
45245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32> [[TMP1]], i32 1)
45254ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i16> [[TMP8]], ptr @__msan_retval_tls, align 8
45265d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
45275d0a12d3SThurston Dang;
45285d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
45295d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32> %tmp1, i32 1)
45305d0a12d3SThurston Dang  ret <4 x i16> %tmp3
45315d0a12d3SThurston Dang}
45325d0a12d3SThurston Dang
45335d0a12d3SThurston Dangdefine <2 x i32> @sqrshrn2s(ptr %A) nounwind sanitize_memory {
45345d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @sqrshrn2s(
45355d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
45365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
45375d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
45385d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4539*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
45405d0a12d3SThurston Dang; CHECK:       2:
45415d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
45425d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
45435d0a12d3SThurston Dang; CHECK:       3:
45445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
45455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
45465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
45475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
45485d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
45494ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64> [[_MSLD]], i32 1)
45504ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
45515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64> [[TMP1]], i32 1)
45524ce559d0SThurston Dang; CHECK-NEXT:    store <2 x i32> [[TMP8]], ptr @__msan_retval_tls, align 8
45535d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
45545d0a12d3SThurston Dang;
45555d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
45565d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64> %tmp1, i32 1)
45575d0a12d3SThurston Dang  ret <2 x i32> %tmp3
45585d0a12d3SThurston Dang}
45595d0a12d3SThurston Dang
45605d0a12d3SThurston Dangdefine <16 x i8> @sqrshrn16b(ptr %ret, ptr %A) nounwind sanitize_memory {
45615d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @sqrshrn16b(
45625d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
45635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
45645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
45655d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
45665d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4567*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
45685d0a12d3SThurston Dang; CHECK:       3:
45695d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
45705d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
45715d0a12d3SThurston Dang; CHECK:       4:
45725d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <8 x i8>, ptr [[RET]], align 8
45735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
45745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
45755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
45765d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
45775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4578*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
45795d0a12d3SThurston Dang; CHECK:       8:
45805d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
45815d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
45825d0a12d3SThurston Dang; CHECK:       9:
45835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
45845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
45855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
45865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
45875d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
45884ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16> [[_MSLD1]], i32 1)
45894ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i8> [[TMP13]], zeroinitializer
45905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16> [[TMP1]], i32 1)
45914ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <8 x i8> [[_MSLD]], <8 x i8> [[TMP14]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
45925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i8> [[OUT]], <8 x i8> [[TMP3]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
45935d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
45945d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP4]]
45955d0a12d3SThurston Dang;
45965d0a12d3SThurston Dang  %out = load <8 x i8>, ptr %ret
45975d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
45985d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16> %tmp1, i32 1)
45995d0a12d3SThurston Dang  %tmp4 = shufflevector <8 x i8> %out, <8 x i8> %tmp3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
46005d0a12d3SThurston Dang  ret <16 x i8> %tmp4
46015d0a12d3SThurston Dang}
46025d0a12d3SThurston Dang
46035d0a12d3SThurston Dangdefine <8 x i16> @sqrshrn8h(ptr %ret, ptr %A) nounwind sanitize_memory {
46045d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @sqrshrn8h(
46055d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
46065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
46075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
46085d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
46095d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4610*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
46115d0a12d3SThurston Dang; CHECK:       3:
46125d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
46135d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
46145d0a12d3SThurston Dang; CHECK:       4:
46155d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <4 x i16>, ptr [[RET]], align 8
46165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
46175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
46185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
46195d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
46205d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4621*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
46225d0a12d3SThurston Dang; CHECK:       8:
46235d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
46245d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
46255d0a12d3SThurston Dang; CHECK:       9:
46265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
46275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
46285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
46295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
46305d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
46314ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32> [[_MSLD1]], i32 1)
46324ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i16> [[TMP13]], zeroinitializer
46335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32> [[TMP1]], i32 1)
46344ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <4 x i16> [[_MSLD]], <4 x i16> [[TMP14]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
46355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <4 x i16> [[OUT]], <4 x i16> [[TMP3]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
46365d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
46375d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP4]]
46385d0a12d3SThurston Dang;
46395d0a12d3SThurston Dang  %out = load <4 x i16>, ptr %ret
46405d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
46415d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32> %tmp1, i32 1)
46425d0a12d3SThurston Dang  %tmp4 = shufflevector <4 x i16> %out, <4 x i16> %tmp3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
46435d0a12d3SThurston Dang  ret <8 x i16> %tmp4
46445d0a12d3SThurston Dang}
46455d0a12d3SThurston Dang
46465d0a12d3SThurston Dangdefine <4 x i32> @sqrshrn4s(ptr %ret, ptr %A) nounwind sanitize_memory {
46475d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @sqrshrn4s(
46485d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
46495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
46505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
46515d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
46525d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4653*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
46545d0a12d3SThurston Dang; CHECK:       3:
46555d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
46565d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
46575d0a12d3SThurston Dang; CHECK:       4:
46585d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <2 x i32>, ptr [[RET]], align 8
46595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
46605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
46615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
46625d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
46635d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4664*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
46655d0a12d3SThurston Dang; CHECK:       8:
46665d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
46675d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
46685d0a12d3SThurston Dang; CHECK:       9:
46695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
46705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
46715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
46725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
46735d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
46744ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64> [[_MSLD1]], i32 1)
46754ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i32> [[TMP13]], zeroinitializer
46765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64> [[TMP1]], i32 1)
46774ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <2 x i32> [[_MSLD]], <2 x i32> [[TMP14]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
46785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <2 x i32> [[OUT]], <2 x i32> [[TMP3]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
46795d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
46805d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP4]]
46815d0a12d3SThurston Dang;
46825d0a12d3SThurston Dang  %out = load <2 x i32>, ptr %ret
46835d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
46845d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64> %tmp1, i32 1)
46855d0a12d3SThurston Dang  %tmp4 = shufflevector <2 x i32> %out, <2 x i32> %tmp3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
46865d0a12d3SThurston Dang  ret <4 x i32> %tmp4
46875d0a12d3SThurston Dang}
46885d0a12d3SThurston Dang
46895d0a12d3SThurston Dangdeclare i32  @llvm.aarch64.neon.sqrshrn.i32(i64, i32) nounwind readnone
46905d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16>, i32) nounwind readnone
46915d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32>, i32) nounwind readnone
46925d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64>, i32) nounwind readnone
46935d0a12d3SThurston Dang
46945d0a12d3SThurston Dangdefine i32 @sqrshrun1s(i64 %A) nounwind sanitize_memory {
46955d0a12d3SThurston Dang; CHECK-LABEL: define i32 @sqrshrun1s(
46965d0a12d3SThurston Dang; CHECK-SAME: i64 [[A:%.*]]) #[[ATTR0]] {
46975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
46985d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
46994ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @llvm.aarch64.neon.sqrshrun.i32(i64 [[TMP1]], i32 1)
47004ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = or i32 [[TMP2]], 0
47015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP:%.*]] = call i32 @llvm.aarch64.neon.sqrshrun.i32(i64 [[A]], i32 1)
47024ce559d0SThurston Dang; CHECK-NEXT:    store i32 [[TMP3]], ptr @__msan_retval_tls, align 8
47035d0a12d3SThurston Dang; CHECK-NEXT:    ret i32 [[TMP]]
47045d0a12d3SThurston Dang;
47055d0a12d3SThurston Dang  %tmp = call i32 @llvm.aarch64.neon.sqrshrun.i32(i64 %A, i32 1)
47065d0a12d3SThurston Dang  ret i32 %tmp
47075d0a12d3SThurston Dang}
47085d0a12d3SThurston Dang
47095d0a12d3SThurston Dangdefine <8 x i8> @sqrshrun8b(ptr %A) nounwind sanitize_memory {
47105d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @sqrshrun8b(
47115d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
47125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
47135d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
47145d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4715*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
47165d0a12d3SThurston Dang; CHECK:       2:
47175d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
47185d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
47195d0a12d3SThurston Dang; CHECK:       3:
47205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
47215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
47225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
47235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
47245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
47254ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16> [[_MSLD]], i32 1)
47264ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
47275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16> [[TMP1]], i32 1)
47284ce559d0SThurston Dang; CHECK-NEXT:    store <8 x i8> [[TMP8]], ptr @__msan_retval_tls, align 8
47295d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
47305d0a12d3SThurston Dang;
47315d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
47325d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16> %tmp1, i32 1)
47335d0a12d3SThurston Dang  ret <8 x i8> %tmp3
47345d0a12d3SThurston Dang}
47355d0a12d3SThurston Dang
47365d0a12d3SThurston Dangdefine <4 x i16> @sqrshrun4h(ptr %A) nounwind sanitize_memory {
47375d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @sqrshrun4h(
47385d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
47395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
47405d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
47415d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4742*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
47435d0a12d3SThurston Dang; CHECK:       2:
47445d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
47455d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
47465d0a12d3SThurston Dang; CHECK:       3:
47475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
47485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
47495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
47505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
47515d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
47524ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32> [[_MSLD]], i32 1)
47534ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
47545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32> [[TMP1]], i32 1)
47554ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i16> [[TMP8]], ptr @__msan_retval_tls, align 8
47565d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
47575d0a12d3SThurston Dang;
47585d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
47595d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32> %tmp1, i32 1)
47605d0a12d3SThurston Dang  ret <4 x i16> %tmp3
47615d0a12d3SThurston Dang}
47625d0a12d3SThurston Dang
47635d0a12d3SThurston Dangdefine <2 x i32> @sqrshrun2s(ptr %A) nounwind sanitize_memory {
47645d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @sqrshrun2s(
47655d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
47665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
47675d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
47685d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4769*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
47705d0a12d3SThurston Dang; CHECK:       2:
47715d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
47725d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
47735d0a12d3SThurston Dang; CHECK:       3:
47745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
47755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
47765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
47775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
47785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
47794ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64> [[_MSLD]], i32 1)
47804ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
47815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64> [[TMP1]], i32 1)
47824ce559d0SThurston Dang; CHECK-NEXT:    store <2 x i32> [[TMP8]], ptr @__msan_retval_tls, align 8
47835d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
47845d0a12d3SThurston Dang;
47855d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
47865d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64> %tmp1, i32 1)
47875d0a12d3SThurston Dang  ret <2 x i32> %tmp3
47885d0a12d3SThurston Dang}
47895d0a12d3SThurston Dang
47905d0a12d3SThurston Dangdefine <16 x i8> @sqrshrun16b(ptr %ret, ptr %A) nounwind sanitize_memory {
47915d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @sqrshrun16b(
47925d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
47935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
47945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
47955d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
47965d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4797*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
47985d0a12d3SThurston Dang; CHECK:       3:
47995d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
48005d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
48015d0a12d3SThurston Dang; CHECK:       4:
48025d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <8 x i8>, ptr [[RET]], align 8
48035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
48045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
48055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
48065d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
48075d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4808*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
48095d0a12d3SThurston Dang; CHECK:       8:
48105d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
48115d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
48125d0a12d3SThurston Dang; CHECK:       9:
48135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
48145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
48155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
48165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
48175d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
48184ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16> [[_MSLD1]], i32 1)
48194ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i8> [[TMP13]], zeroinitializer
48205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16> [[TMP1]], i32 1)
48214ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <8 x i8> [[_MSLD]], <8 x i8> [[TMP14]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
48225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i8> [[OUT]], <8 x i8> [[TMP3]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
48235d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
48245d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP4]]
48255d0a12d3SThurston Dang;
48265d0a12d3SThurston Dang  %out = load <8 x i8>, ptr %ret
48275d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
48285d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16> %tmp1, i32 1)
48295d0a12d3SThurston Dang  %tmp4 = shufflevector <8 x i8> %out, <8 x i8> %tmp3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
48305d0a12d3SThurston Dang  ret <16 x i8> %tmp4
48315d0a12d3SThurston Dang}
48325d0a12d3SThurston Dang
48335d0a12d3SThurston Dangdefine <8 x i16> @sqrshrun8h(ptr %ret, ptr %A) nounwind sanitize_memory {
48345d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @sqrshrun8h(
48355d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
48365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
48375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
48385d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
48395d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4840*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
48415d0a12d3SThurston Dang; CHECK:       3:
48425d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
48435d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
48445d0a12d3SThurston Dang; CHECK:       4:
48455d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <4 x i16>, ptr [[RET]], align 8
48465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
48475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
48485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
48495d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
48505d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4851*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
48525d0a12d3SThurston Dang; CHECK:       8:
48535d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
48545d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
48555d0a12d3SThurston Dang; CHECK:       9:
48565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
48575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
48585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
48595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
48605d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
48614ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32> [[_MSLD1]], i32 1)
48624ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i16> [[TMP13]], zeroinitializer
48635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32> [[TMP1]], i32 1)
48644ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <4 x i16> [[_MSLD]], <4 x i16> [[TMP14]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
48655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <4 x i16> [[OUT]], <4 x i16> [[TMP3]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
48665d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
48675d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP4]]
48685d0a12d3SThurston Dang;
48695d0a12d3SThurston Dang  %out = load <4 x i16>, ptr %ret
48705d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
48715d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32> %tmp1, i32 1)
48725d0a12d3SThurston Dang  %tmp4 = shufflevector <4 x i16> %out, <4 x i16> %tmp3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
48735d0a12d3SThurston Dang  ret <8 x i16> %tmp4
48745d0a12d3SThurston Dang}
48755d0a12d3SThurston Dang
48765d0a12d3SThurston Dangdefine <4 x i32> @sqrshrun4s(ptr %ret, ptr %A) nounwind sanitize_memory {
48775d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @sqrshrun4s(
48785d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
48795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
48805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
48815d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
48825d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4883*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
48845d0a12d3SThurston Dang; CHECK:       3:
48855d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
48865d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
48875d0a12d3SThurston Dang; CHECK:       4:
48885d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <2 x i32>, ptr [[RET]], align 8
48895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
48905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
48915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
48925d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
48935d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
4894*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
48955d0a12d3SThurston Dang; CHECK:       8:
48965d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
48975d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
48985d0a12d3SThurston Dang; CHECK:       9:
48995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
49005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
49015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
49025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
49035d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
49044ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64> [[_MSLD1]], i32 1)
49054ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i32> [[TMP13]], zeroinitializer
49065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64> [[TMP1]], i32 1)
49074ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <2 x i32> [[_MSLD]], <2 x i32> [[TMP14]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
49085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <2 x i32> [[OUT]], <2 x i32> [[TMP3]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
49095d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
49105d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP4]]
49115d0a12d3SThurston Dang;
49125d0a12d3SThurston Dang  %out = load <2 x i32>, ptr %ret
49135d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
49145d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64> %tmp1, i32 1)
49155d0a12d3SThurston Dang  %tmp4 = shufflevector <2 x i32> %out, <2 x i32> %tmp3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
49165d0a12d3SThurston Dang  ret <4 x i32> %tmp4
49175d0a12d3SThurston Dang}
49185d0a12d3SThurston Dang
49195d0a12d3SThurston Dangdeclare i32  @llvm.aarch64.neon.sqrshrun.i32(i64, i32) nounwind readnone
49205d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16>, i32) nounwind readnone
49215d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32>, i32) nounwind readnone
49225d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64>, i32) nounwind readnone
49235d0a12d3SThurston Dang
49245d0a12d3SThurston Dangdefine i32 @uqrshrn1s(i64 %A) nounwind sanitize_memory {
49255d0a12d3SThurston Dang; CHECK-LABEL: define i32 @uqrshrn1s(
49265d0a12d3SThurston Dang; CHECK-SAME: i64 [[A:%.*]]) #[[ATTR0]] {
49275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
49285d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
49294ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @llvm.aarch64.neon.uqrshrn.i32(i64 [[TMP1]], i32 1)
49304ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = or i32 [[TMP2]], 0
49315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP:%.*]] = call i32 @llvm.aarch64.neon.uqrshrn.i32(i64 [[A]], i32 1)
49324ce559d0SThurston Dang; CHECK-NEXT:    store i32 [[TMP3]], ptr @__msan_retval_tls, align 8
49335d0a12d3SThurston Dang; CHECK-NEXT:    ret i32 [[TMP]]
49345d0a12d3SThurston Dang;
49355d0a12d3SThurston Dang  %tmp = call i32 @llvm.aarch64.neon.uqrshrn.i32(i64 %A, i32 1)
49365d0a12d3SThurston Dang  ret i32 %tmp
49375d0a12d3SThurston Dang}
49385d0a12d3SThurston Dang
49395d0a12d3SThurston Dangdefine <8 x i8> @uqrshrn8b(ptr %A) nounwind sanitize_memory {
49405d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @uqrshrn8b(
49415d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
49425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
49435d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
49445d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4945*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
49465d0a12d3SThurston Dang; CHECK:       2:
49475d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
49485d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
49495d0a12d3SThurston Dang; CHECK:       3:
49505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
49515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
49525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
49535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
49545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
49554ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqrshrn.v8i8(<8 x i16> [[_MSLD]], i32 1)
49564ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
49575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqrshrn.v8i8(<8 x i16> [[TMP1]], i32 1)
49584ce559d0SThurston Dang; CHECK-NEXT:    store <8 x i8> [[TMP8]], ptr @__msan_retval_tls, align 8
49595d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
49605d0a12d3SThurston Dang;
49615d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
49625d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.uqrshrn.v8i8(<8 x i16> %tmp1, i32 1)
49635d0a12d3SThurston Dang  ret <8 x i8> %tmp3
49645d0a12d3SThurston Dang}
49655d0a12d3SThurston Dang
49665d0a12d3SThurston Dangdefine <4 x i16> @uqrshrn4h(ptr %A) nounwind sanitize_memory {
49675d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @uqrshrn4h(
49685d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
49695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
49705d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
49715d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4972*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
49735d0a12d3SThurston Dang; CHECK:       2:
49745d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
49755d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
49765d0a12d3SThurston Dang; CHECK:       3:
49775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
49785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
49795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
49805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
49815d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
49824ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqrshrn.v4i16(<4 x i32> [[_MSLD]], i32 1)
49834ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
49845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqrshrn.v4i16(<4 x i32> [[TMP1]], i32 1)
49854ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i16> [[TMP8]], ptr @__msan_retval_tls, align 8
49865d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
49875d0a12d3SThurston Dang;
49885d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
49895d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.uqrshrn.v4i16(<4 x i32> %tmp1, i32 1)
49905d0a12d3SThurston Dang  ret <4 x i16> %tmp3
49915d0a12d3SThurston Dang}
49925d0a12d3SThurston Dang
49935d0a12d3SThurston Dangdefine <2 x i32> @uqrshrn2s(ptr %A) nounwind sanitize_memory {
49945d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @uqrshrn2s(
49955d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
49965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
49975d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
49985d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
4999*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
50005d0a12d3SThurston Dang; CHECK:       2:
50015d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
50025d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
50035d0a12d3SThurston Dang; CHECK:       3:
50045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
50055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
50065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
50075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
50085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
50094ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqrshrn.v2i32(<2 x i64> [[_MSLD]], i32 1)
50104ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
50115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqrshrn.v2i32(<2 x i64> [[TMP1]], i32 1)
50124ce559d0SThurston Dang; CHECK-NEXT:    store <2 x i32> [[TMP8]], ptr @__msan_retval_tls, align 8
50135d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
50145d0a12d3SThurston Dang;
50155d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
50165d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.uqrshrn.v2i32(<2 x i64> %tmp1, i32 1)
50175d0a12d3SThurston Dang  ret <2 x i32> %tmp3
50185d0a12d3SThurston Dang}
50195d0a12d3SThurston Dang
50205d0a12d3SThurston Dangdefine <16 x i8> @uqrshrn16b(ptr %ret, ptr %A) nounwind sanitize_memory {
50215d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @uqrshrn16b(
50225d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
50235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
50245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
50255d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
50265d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5027*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
50285d0a12d3SThurston Dang; CHECK:       3:
50295d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
50305d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
50315d0a12d3SThurston Dang; CHECK:       4:
50325d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <8 x i8>, ptr [[RET]], align 8
50335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
50345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
50355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
50365d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
50375d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
5038*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
50395d0a12d3SThurston Dang; CHECK:       8:
50405d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
50415d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
50425d0a12d3SThurston Dang; CHECK:       9:
50435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
50445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
50455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
50465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
50475d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
50484ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqrshrn.v8i8(<8 x i16> [[_MSLD1]], i32 1)
50494ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i8> [[TMP13]], zeroinitializer
50505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqrshrn.v8i8(<8 x i16> [[TMP1]], i32 1)
50514ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <8 x i8> [[_MSLD]], <8 x i8> [[TMP14]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
50525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i8> [[OUT]], <8 x i8> [[TMP3]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
50535d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
50545d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP4]]
50555d0a12d3SThurston Dang;
50565d0a12d3SThurston Dang  %out = load <8 x i8>, ptr %ret
50575d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
50585d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.uqrshrn.v8i8(<8 x i16> %tmp1, i32 1)
50595d0a12d3SThurston Dang  %tmp4 = shufflevector <8 x i8> %out, <8 x i8> %tmp3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
50605d0a12d3SThurston Dang  ret <16 x i8> %tmp4
50615d0a12d3SThurston Dang}
50625d0a12d3SThurston Dang
50635d0a12d3SThurston Dangdefine <8 x i16> @uqrshrn8h(ptr %ret, ptr %A) nounwind sanitize_memory {
50645d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @uqrshrn8h(
50655d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
50665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
50675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
50685d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
50695d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5070*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
50715d0a12d3SThurston Dang; CHECK:       3:
50725d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
50735d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
50745d0a12d3SThurston Dang; CHECK:       4:
50755d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <4 x i16>, ptr [[RET]], align 8
50765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
50775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
50785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
50795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
50805d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
5081*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
50825d0a12d3SThurston Dang; CHECK:       8:
50835d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
50845d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
50855d0a12d3SThurston Dang; CHECK:       9:
50865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
50875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
50885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
50895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
50905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
50914ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqrshrn.v4i16(<4 x i32> [[_MSLD1]], i32 1)
50924ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i16> [[TMP13]], zeroinitializer
50935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqrshrn.v4i16(<4 x i32> [[TMP1]], i32 1)
50944ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <4 x i16> [[_MSLD]], <4 x i16> [[TMP14]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
50955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <4 x i16> [[OUT]], <4 x i16> [[TMP3]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
50965d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
50975d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP4]]
50985d0a12d3SThurston Dang;
50995d0a12d3SThurston Dang  %out = load <4 x i16>, ptr %ret
51005d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
51015d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.uqrshrn.v4i16(<4 x i32> %tmp1, i32 1)
51025d0a12d3SThurston Dang  %tmp4 = shufflevector <4 x i16> %out, <4 x i16> %tmp3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
51035d0a12d3SThurston Dang  ret <8 x i16> %tmp4
51045d0a12d3SThurston Dang}
51055d0a12d3SThurston Dang
51065d0a12d3SThurston Dangdefine <4 x i32> @uqrshrn4s(ptr %ret, ptr %A) nounwind sanitize_memory {
51075d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @uqrshrn4s(
51085d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
51095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
51105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
51115d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
51125d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5113*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
51145d0a12d3SThurston Dang; CHECK:       3:
51155d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
51165d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
51175d0a12d3SThurston Dang; CHECK:       4:
51185d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <2 x i32>, ptr [[RET]], align 8
51195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
51205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
51215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
51225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
51235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
5124*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
51255d0a12d3SThurston Dang; CHECK:       8:
51265d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
51275d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
51285d0a12d3SThurston Dang; CHECK:       9:
51295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
51305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
51315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
51325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
51335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
51344ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqrshrn.v2i32(<2 x i64> [[_MSLD1]], i32 1)
51354ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i32> [[TMP13]], zeroinitializer
51365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqrshrn.v2i32(<2 x i64> [[TMP1]], i32 1)
51374ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <2 x i32> [[_MSLD]], <2 x i32> [[TMP14]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
51385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <2 x i32> [[OUT]], <2 x i32> [[TMP3]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
51395d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
51405d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP4]]
51415d0a12d3SThurston Dang;
51425d0a12d3SThurston Dang  %out = load <2 x i32>, ptr %ret
51435d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
51445d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.uqrshrn.v2i32(<2 x i64> %tmp1, i32 1)
51455d0a12d3SThurston Dang  %tmp4 = shufflevector <2 x i32> %out, <2 x i32> %tmp3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
51465d0a12d3SThurston Dang  ret <4 x i32> %tmp4
51475d0a12d3SThurston Dang}
51485d0a12d3SThurston Dang
51495d0a12d3SThurston Dangdeclare i32  @llvm.aarch64.neon.uqrshrn.i32(i64, i32) nounwind readnone
51505d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.uqrshrn.v8i8(<8 x i16>, i32) nounwind readnone
51515d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.uqrshrn.v4i16(<4 x i32>, i32) nounwind readnone
51525d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.uqrshrn.v2i32(<2 x i64>, i32) nounwind readnone
51535d0a12d3SThurston Dang
51545d0a12d3SThurston Dangdefine i32 @uqshrn1s(i64 %A) nounwind sanitize_memory {
51555d0a12d3SThurston Dang; CHECK-LABEL: define i32 @uqshrn1s(
51565d0a12d3SThurston Dang; CHECK-SAME: i64 [[A:%.*]]) #[[ATTR0]] {
51575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
51585d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
51594ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @llvm.aarch64.neon.uqshrn.i32(i64 [[TMP1]], i32 1)
51604ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = or i32 [[TMP2]], 0
51615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP:%.*]] = call i32 @llvm.aarch64.neon.uqshrn.i32(i64 [[A]], i32 1)
51624ce559d0SThurston Dang; CHECK-NEXT:    store i32 [[TMP3]], ptr @__msan_retval_tls, align 8
51635d0a12d3SThurston Dang; CHECK-NEXT:    ret i32 [[TMP]]
51645d0a12d3SThurston Dang;
51655d0a12d3SThurston Dang  %tmp = call i32 @llvm.aarch64.neon.uqshrn.i32(i64 %A, i32 1)
51665d0a12d3SThurston Dang  ret i32 %tmp
51675d0a12d3SThurston Dang}
51685d0a12d3SThurston Dang
51695d0a12d3SThurston Dangdefine <8 x i8> @uqshrn8b(ptr %A) nounwind sanitize_memory {
51705d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @uqshrn8b(
51715d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
51725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
51735d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
51745d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5175*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
51765d0a12d3SThurston Dang; CHECK:       2:
51775d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
51785d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
51795d0a12d3SThurston Dang; CHECK:       3:
51805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
51815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
51825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
51835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
51845d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
51854ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16> [[_MSLD]], i32 1)
51864ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
51875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16> [[TMP1]], i32 1)
51884ce559d0SThurston Dang; CHECK-NEXT:    store <8 x i8> [[TMP8]], ptr @__msan_retval_tls, align 8
51895d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
51905d0a12d3SThurston Dang;
51915d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
51925d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16> %tmp1, i32 1)
51935d0a12d3SThurston Dang  ret <8 x i8> %tmp3
51945d0a12d3SThurston Dang}
51955d0a12d3SThurston Dang
51965d0a12d3SThurston Dangdefine <4 x i16> @uqshrn4h(ptr %A) nounwind sanitize_memory {
51975d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @uqshrn4h(
51985d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
51995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
52005d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
52015d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5202*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
52035d0a12d3SThurston Dang; CHECK:       2:
52045d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
52055d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
52065d0a12d3SThurston Dang; CHECK:       3:
52075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
52085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
52095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
52105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
52115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
52124ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32> [[_MSLD]], i32 1)
52134ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
52145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32> [[TMP1]], i32 1)
52154ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i16> [[TMP8]], ptr @__msan_retval_tls, align 8
52165d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
52175d0a12d3SThurston Dang;
52185d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
52195d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32> %tmp1, i32 1)
52205d0a12d3SThurston Dang  ret <4 x i16> %tmp3
52215d0a12d3SThurston Dang}
52225d0a12d3SThurston Dang
52235d0a12d3SThurston Dangdefine <2 x i32> @uqshrn2s(ptr %A) nounwind sanitize_memory {
52245d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @uqshrn2s(
52255d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
52265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
52275d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
52285d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5229*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
52305d0a12d3SThurston Dang; CHECK:       2:
52315d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
52325d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
52335d0a12d3SThurston Dang; CHECK:       3:
52345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
52355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
52365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
52375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
52385d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
52394ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64> [[_MSLD]], i32 1)
52404ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
52415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64> [[TMP1]], i32 1)
52424ce559d0SThurston Dang; CHECK-NEXT:    store <2 x i32> [[TMP8]], ptr @__msan_retval_tls, align 8
52435d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
52445d0a12d3SThurston Dang;
52455d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
52465d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64> %tmp1, i32 1)
52475d0a12d3SThurston Dang  ret <2 x i32> %tmp3
52485d0a12d3SThurston Dang}
52495d0a12d3SThurston Dang
52505d0a12d3SThurston Dangdefine <16 x i8> @uqshrn16b(ptr %ret, ptr %A) nounwind sanitize_memory {
52515d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @uqshrn16b(
52525d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
52535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
52545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
52555d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
52565d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5257*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
52585d0a12d3SThurston Dang; CHECK:       3:
52595d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
52605d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
52615d0a12d3SThurston Dang; CHECK:       4:
52625d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <8 x i8>, ptr [[RET]], align 8
52635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
52645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
52655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
52665d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
52675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
5268*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
52695d0a12d3SThurston Dang; CHECK:       8:
52705d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
52715d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
52725d0a12d3SThurston Dang; CHECK:       9:
52735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
52745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
52755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
52765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
52775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
52784ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16> [[_MSLD1]], i32 1)
52794ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i8> [[TMP13]], zeroinitializer
52805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16> [[TMP1]], i32 1)
52814ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <8 x i8> [[_MSLD]], <8 x i8> [[TMP14]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
52825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <8 x i8> [[OUT]], <8 x i8> [[TMP3]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
52835d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
52845d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP4]]
52855d0a12d3SThurston Dang;
52865d0a12d3SThurston Dang  %out = load <8 x i8>, ptr %ret
52875d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
52885d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16> %tmp1, i32 1)
52895d0a12d3SThurston Dang  %tmp4 = shufflevector <8 x i8> %out, <8 x i8> %tmp3, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
52905d0a12d3SThurston Dang  ret <16 x i8> %tmp4
52915d0a12d3SThurston Dang}
52925d0a12d3SThurston Dang
52935d0a12d3SThurston Dangdefine <8 x i16> @uqshrn8h(ptr %ret, ptr %A) nounwind sanitize_memory {
52945d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @uqshrn8h(
52955d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
52965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
52975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
52985d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
52995d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5300*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
53015d0a12d3SThurston Dang; CHECK:       3:
53025d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
53035d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
53045d0a12d3SThurston Dang; CHECK:       4:
53055d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <4 x i16>, ptr [[RET]], align 8
53065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
53075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
53085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
53095d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
53105d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
5311*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
53125d0a12d3SThurston Dang; CHECK:       8:
53135d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
53145d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
53155d0a12d3SThurston Dang; CHECK:       9:
53165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
53175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
53185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
53195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
53205d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
53214ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32> [[_MSLD1]], i32 1)
53224ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i16> [[TMP13]], zeroinitializer
53235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32> [[TMP1]], i32 1)
53244ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <4 x i16> [[_MSLD]], <4 x i16> [[TMP14]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
53255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <4 x i16> [[OUT]], <4 x i16> [[TMP3]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
53265d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
53275d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP4]]
53285d0a12d3SThurston Dang;
53295d0a12d3SThurston Dang  %out = load <4 x i16>, ptr %ret
53305d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
53315d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32> %tmp1, i32 1)
53325d0a12d3SThurston Dang  %tmp4 = shufflevector <4 x i16> %out, <4 x i16> %tmp3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
53335d0a12d3SThurston Dang  ret <8 x i16> %tmp4
53345d0a12d3SThurston Dang}
53355d0a12d3SThurston Dang
53365d0a12d3SThurston Dangdefine <4 x i32> @uqshrn4s(ptr %ret, ptr %A) nounwind sanitize_memory {
53375d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @uqshrn4s(
53385d0a12d3SThurston Dang; CHECK-SAME: ptr [[RET:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {
53395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
53405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
53415d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
53425d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5343*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
53445d0a12d3SThurston Dang; CHECK:       3:
53455d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
53465d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
53475d0a12d3SThurston Dang; CHECK:       4:
53485d0a12d3SThurston Dang; CHECK-NEXT:    [[OUT:%.*]] = load <2 x i32>, ptr [[RET]], align 8
53495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[RET]] to i64
53505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
53515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
53525d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
53535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
5354*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
53555d0a12d3SThurston Dang; CHECK:       8:
53565d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
53575d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
53585d0a12d3SThurston Dang; CHECK:       9:
53595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
53605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[A]] to i64
53615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
53625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
53635d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
53644ce559d0SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64> [[_MSLD1]], i32 1)
53654ce559d0SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i32> [[TMP13]], zeroinitializer
53665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64> [[TMP1]], i32 1)
53674ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <2 x i32> [[_MSLD]], <2 x i32> [[TMP14]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
53685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <2 x i32> [[OUT]], <2 x i32> [[TMP3]], <4 x i32> <i32 0, i32 1, i32 2, i32 3>
53695d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
53705d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP4]]
53715d0a12d3SThurston Dang;
53725d0a12d3SThurston Dang  %out = load <2 x i32>, ptr %ret
53735d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
53745d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64> %tmp1, i32 1)
53755d0a12d3SThurston Dang  %tmp4 = shufflevector <2 x i32> %out, <2 x i32> %tmp3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
53765d0a12d3SThurston Dang  ret <4 x i32> %tmp4
53775d0a12d3SThurston Dang}
53785d0a12d3SThurston Dang
53795d0a12d3SThurston Dangdeclare i32  @llvm.aarch64.neon.uqshrn.i32(i64, i32) nounwind readnone
53805d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16>, i32) nounwind readnone
53815d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32>, i32) nounwind readnone
53825d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64>, i32) nounwind readnone
53835d0a12d3SThurston Dang
53845d0a12d3SThurston Dangdefine <8 x i16> @ushll8h(ptr %A) nounwind sanitize_memory {
53855d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @ushll8h(
53865d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
53875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
53885d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
53895d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5390*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
53915d0a12d3SThurston Dang; CHECK:       2:
53925d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
53935d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
53945d0a12d3SThurston Dang; CHECK:       3:
53955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
53965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
53975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
53985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
53995d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP6]], align 8
54005d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <8 x i8> [[_MSLD]] to <8 x i16>
54015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <8 x i8> [[TMP1]] to <8 x i16>
5402*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = shl <8 x i16> [[_MSPROP]], splat (i16 1)
54035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
5404*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <8 x i16> [[TMP2]], splat (i16 1)
54055d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[TMP8]], ptr @__msan_retval_tls, align 8
54065d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
54075d0a12d3SThurston Dang;
54085d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
54095d0a12d3SThurston Dang  %tmp2 = zext <8 x i8> %tmp1 to <8 x i16>
54105d0a12d3SThurston Dang  %tmp3 = shl <8 x i16> %tmp2, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
54115d0a12d3SThurston Dang  ret <8 x i16> %tmp3
54125d0a12d3SThurston Dang}
54135d0a12d3SThurston Dang
54145d0a12d3SThurston Dangdefine <4 x i32> @ushll4s(ptr %A) nounwind sanitize_memory {
54155d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @ushll4s(
54165d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
54175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
54185d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
54195d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5420*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
54215d0a12d3SThurston Dang; CHECK:       2:
54225d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
54235d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
54245d0a12d3SThurston Dang; CHECK:       3:
54255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
54265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
54275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
54285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
54295d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP6]], align 8
54305d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <4 x i16> [[_MSLD]] to <4 x i32>
54315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <4 x i16> [[TMP1]] to <4 x i32>
5432*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = shl <4 x i32> [[_MSPROP]], splat (i32 1)
54335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
5434*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <4 x i32> [[TMP2]], splat (i32 1)
54355d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[TMP8]], ptr @__msan_retval_tls, align 8
54365d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
54375d0a12d3SThurston Dang;
54385d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
54395d0a12d3SThurston Dang  %tmp2 = zext <4 x i16> %tmp1 to <4 x i32>
54405d0a12d3SThurston Dang  %tmp3 = shl <4 x i32> %tmp2, <i32 1, i32 1, i32 1, i32 1>
54415d0a12d3SThurston Dang  ret <4 x i32> %tmp3
54425d0a12d3SThurston Dang}
54435d0a12d3SThurston Dang
54445d0a12d3SThurston Dangdefine <2 x i64> @ushll2d(ptr %A) nounwind sanitize_memory {
54455d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @ushll2d(
54465d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
54475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
54485d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
54495d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5450*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
54515d0a12d3SThurston Dang; CHECK:       2:
54525d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
54535d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
54545d0a12d3SThurston Dang; CHECK:       3:
54555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
54565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
54575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
54585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
54595d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8
54605d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <2 x i32> [[_MSLD]] to <2 x i64>
54615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
5462*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = shl <2 x i64> [[_MSPROP]], splat (i64 1)
54635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
5464*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <2 x i64> [[TMP2]], splat (i64 1)
54655d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[TMP8]], ptr @__msan_retval_tls, align 8
54665d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
54675d0a12d3SThurston Dang;
54685d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
54695d0a12d3SThurston Dang  %tmp2 = zext <2 x i32> %tmp1 to <2 x i64>
54705d0a12d3SThurston Dang  %tmp3 = shl <2 x i64> %tmp2, <i64 1, i64 1>
54715d0a12d3SThurston Dang  ret <2 x i64> %tmp3
54725d0a12d3SThurston Dang}
54735d0a12d3SThurston Dang
54745d0a12d3SThurston Dangdefine <8 x i16> @ushll2_8h(ptr %A) nounwind sanitize_memory {
54755d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @ushll2_8h(
54765d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
54775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
54785d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
54795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5480*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
54815d0a12d3SThurston Dang; CHECK:       2:
54825d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
54835d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
54845d0a12d3SThurston Dang; CHECK:       3:
54855d0a12d3SThurston Dang; CHECK-NEXT:    [[LOAD1:%.*]] = load <16 x i8>, ptr [[A]], align 16
54865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
54875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
54885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
54895d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP6]], align 16
5490*38fffa63SPaul Walker; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <16 x i8> [[_MSLD]], <16 x i8> splat (i8 -1), <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
54915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <16 x i8> [[LOAD1]], <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
54925d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = zext <8 x i8> [[_MSPROP]] to <8 x i16>
54935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <8 x i8> [[TMP1]] to <8 x i16>
5494*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = shl <8 x i16> [[_MSPROP1]], splat (i16 1)
54955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
5496*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <8 x i16> [[TMP2]], splat (i16 1)
54975d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[TMP8]], ptr @__msan_retval_tls, align 8
54985d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
54995d0a12d3SThurston Dang;
55005d0a12d3SThurston Dang  %load1 = load <16 x i8>, ptr %A
55015d0a12d3SThurston Dang  %tmp1 = shufflevector <16 x i8> %load1, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
55025d0a12d3SThurston Dang  %tmp2 = zext <8 x i8> %tmp1 to <8 x i16>
55035d0a12d3SThurston Dang  %tmp3 = shl <8 x i16> %tmp2, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
55045d0a12d3SThurston Dang  ret <8 x i16> %tmp3
55055d0a12d3SThurston Dang}
55065d0a12d3SThurston Dang
55075d0a12d3SThurston Dangdefine <4 x i32> @ushll2_4s(ptr %A) nounwind sanitize_memory {
55085d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @ushll2_4s(
55095d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
55105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
55115d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
55125d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5513*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
55145d0a12d3SThurston Dang; CHECK:       2:
55155d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
55165d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
55175d0a12d3SThurston Dang; CHECK:       3:
55185d0a12d3SThurston Dang; CHECK-NEXT:    [[LOAD1:%.*]] = load <8 x i16>, ptr [[A]], align 16
55195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
55205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
55215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
55225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
5523*38fffa63SPaul Walker; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <8 x i16> [[_MSLD]], <8 x i16> splat (i16 -1), <4 x i32> <i32 4, i32 5, i32 6, i32 7>
55245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i16> [[LOAD1]], <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
55255d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = zext <4 x i16> [[_MSPROP]] to <4 x i32>
55265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <4 x i16> [[TMP1]] to <4 x i32>
5527*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = shl <4 x i32> [[_MSPROP1]], splat (i32 1)
55285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
5529*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <4 x i32> [[TMP2]], splat (i32 1)
55305d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[TMP8]], ptr @__msan_retval_tls, align 8
55315d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
55325d0a12d3SThurston Dang;
55335d0a12d3SThurston Dang  %load1 = load <8 x i16>, ptr %A
55345d0a12d3SThurston Dang  %tmp1 = shufflevector <8 x i16> %load1, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
55355d0a12d3SThurston Dang  %tmp2 = zext <4 x i16> %tmp1 to <4 x i32>
55365d0a12d3SThurston Dang  %tmp3 = shl <4 x i32> %tmp2, <i32 1, i32 1, i32 1, i32 1>
55375d0a12d3SThurston Dang  ret <4 x i32> %tmp3
55385d0a12d3SThurston Dang}
55395d0a12d3SThurston Dang
55405d0a12d3SThurston Dangdefine <2 x i64> @ushll2_2d(ptr %A) nounwind sanitize_memory {
55415d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @ushll2_2d(
55425d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
55435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
55445d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
55455d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5546*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
55475d0a12d3SThurston Dang; CHECK:       2:
55485d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
55495d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
55505d0a12d3SThurston Dang; CHECK:       3:
55515d0a12d3SThurston Dang; CHECK-NEXT:    [[LOAD1:%.*]] = load <4 x i32>, ptr [[A]], align 16
55525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
55535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
55545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
55555d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
5556*38fffa63SPaul Walker; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <4 x i32> [[_MSLD]], <4 x i32> splat (i32 -1), <2 x i32> <i32 2, i32 3>
55575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <4 x i32> [[LOAD1]], <4 x i32> undef, <2 x i32> <i32 2, i32 3>
55585d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = zext <2 x i32> [[_MSPROP]] to <2 x i64>
55595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
5560*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = shl <2 x i64> [[_MSPROP1]], splat (i64 1)
55615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
5562*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <2 x i64> [[TMP2]], splat (i64 1)
55635d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[TMP8]], ptr @__msan_retval_tls, align 8
55645d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
55655d0a12d3SThurston Dang;
55665d0a12d3SThurston Dang  %load1 = load <4 x i32>, ptr %A
55675d0a12d3SThurston Dang  %tmp1 = shufflevector <4 x i32> %load1, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
55685d0a12d3SThurston Dang  %tmp2 = zext <2 x i32> %tmp1 to <2 x i64>
55695d0a12d3SThurston Dang  %tmp3 = shl <2 x i64> %tmp2, <i64 1, i64 1>
55705d0a12d3SThurston Dang  ret <2 x i64> %tmp3
55715d0a12d3SThurston Dang}
55725d0a12d3SThurston Dang
55735d0a12d3SThurston Dangdeclare <16 x i8> @llvm.aarch64.neon.ushl.v16i8(<16 x i8>, <16 x i8>)
55745d0a12d3SThurston Dangdeclare <8 x i16> @llvm.aarch64.neon.ushl.v8i16(<8 x i16>, <8 x i16>)
55755d0a12d3SThurston Dangdeclare <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32>, <4 x i32>)
55765d0a12d3SThurston Dangdeclare <2 x i64> @llvm.aarch64.neon.ushl.v2i64(<2 x i64>, <2 x i64>)
55775d0a12d3SThurston Dangdeclare <1 x i64> @llvm.aarch64.neon.ushl.v1i64(<1 x i64>, <1 x i64>)
55785d0a12d3SThurston Dangdeclare i64 @llvm.aarch64.neon.ushl.i64(i64, i64)
55795d0a12d3SThurston Dang
55805d0a12d3SThurston Dangdefine <8 x i16> @neon.ushll8h_constant_shift(ptr %A) nounwind sanitize_memory {
55815d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @neon.ushll8h_constant_shift(
55825d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
55835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
55845d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
55855d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5586*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
55875d0a12d3SThurston Dang; CHECK:       2:
55885d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
55895d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
55905d0a12d3SThurston Dang; CHECK:       3:
55915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
55925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
55935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
55945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
55955d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP6]], align 8
55965d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <8 x i8> [[_MSLD]] to <8 x i16>
55975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <8 x i8> [[TMP1]] to <8 x i16>
5598*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i16> @llvm.aarch64.neon.ushl.v8i16(<8 x i16> [[_MSPROP]], <8 x i16> splat (i16 1))
55994ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
5600*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.ushl.v8i16(<8 x i16> [[TMP2]], <8 x i16> splat (i16 1))
56015d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
56025d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
56035d0a12d3SThurston Dang;
56045d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
56055d0a12d3SThurston Dang  %tmp2 = zext <8 x i8> %tmp1 to <8 x i16>
56065d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.ushl.v8i16(<8 x i16> %tmp2, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
56075d0a12d3SThurston Dang  ret <8 x i16> %tmp3
56085d0a12d3SThurston Dang}
56095d0a12d3SThurston Dang
56105d0a12d3SThurston Dangdefine <8 x i16> @neon.ushl8h_no_constant_shift(ptr %A) nounwind sanitize_memory {
56115d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @neon.ushl8h_no_constant_shift(
56125d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
56135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
56145d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
56155d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5616*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
56175d0a12d3SThurston Dang; CHECK:       2:
56185d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
56195d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
56205d0a12d3SThurston Dang; CHECK:       3:
56215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
56225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
56235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
56245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
56255d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP6]], align 8
56265d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <8 x i8> [[_MSLD]] to <8 x i16>
56275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <8 x i8> [[TMP1]] to <8 x i16>
56284ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = bitcast <8 x i16> [[_MSPROP]] to i128
56294ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = trunc i128 [[TMP7]] to i64
56304ce559d0SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = icmp ne i64 [[TMP8]], 0
56314ce559d0SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = sext i1 [[TMP9]] to i128
56324ce559d0SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = bitcast i128 [[TMP10]] to <8 x i16>
56334ce559d0SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = call <8 x i16> @llvm.aarch64.neon.ushl.v8i16(<8 x i16> [[_MSPROP]], <8 x i16> [[TMP2]])
56344ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <8 x i16> [[TMP12]], [[TMP11]]
56355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.ushl.v8i16(<8 x i16> [[TMP2]], <8 x i16> [[TMP2]])
56365d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
56375d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
56385d0a12d3SThurston Dang;
56395d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
56405d0a12d3SThurston Dang  %tmp2 = zext <8 x i8> %tmp1 to <8 x i16>
56415d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.ushl.v8i16(<8 x i16> %tmp2, <8 x i16> %tmp2)
56425d0a12d3SThurston Dang  ret <8 x i16> %tmp3
56435d0a12d3SThurston Dang}
56445d0a12d3SThurston Dang
56455d0a12d3SThurston Dangdefine <4 x i32> @neon.ushl8h_constant_shift_extend_not_2x(ptr %A) nounwind sanitize_memory {
56465d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @neon.ushl8h_constant_shift_extend_not_2x(
56475d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
56485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
56495d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
56505d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5651*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
56525d0a12d3SThurston Dang; CHECK:       2:
56535d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
56545d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
56555d0a12d3SThurston Dang; CHECK:       3:
56565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i8>, ptr [[A]], align 4
56575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
56585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
56595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
56605d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i8>, ptr [[TMP6]], align 4
56615d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <4 x i8> [[_MSLD]] to <4 x i32>
56625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <4 x i8> [[TMP1]] to <4 x i32>
5663*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> [[_MSPROP]], <4 x i32> splat (i32 1))
56644ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
5665*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> [[TMP2]], <4 x i32> splat (i32 1))
56665d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
56675d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
56685d0a12d3SThurston Dang;
56695d0a12d3SThurston Dang  %tmp1 = load <4 x i8>, ptr %A
56705d0a12d3SThurston Dang  %tmp2 = zext <4 x i8> %tmp1 to <4 x i32>
56715d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> %tmp2, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
56725d0a12d3SThurston Dang  ret <4 x i32> %tmp3
56735d0a12d3SThurston Dang}
56745d0a12d3SThurston Dang
56755d0a12d3SThurston Dangdefine <8 x i16> @neon.ushl8_noext_constant_shift(ptr %A) nounwind sanitize_memory {
56765d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @neon.ushl8_noext_constant_shift(
56775d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
56785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
56795d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
56805d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5681*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
56825d0a12d3SThurston Dang; CHECK:       2:
56835d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
56845d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
56855d0a12d3SThurston Dang; CHECK:       3:
56865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
56875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
56885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
56895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
56905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
5691*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i16> @llvm.aarch64.neon.ushl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> splat (i16 1))
56924ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
5693*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.ushl.v8i16(<8 x i16> [[TMP1]], <8 x i16> splat (i16 1))
56945d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
56955d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
56965d0a12d3SThurston Dang;
56975d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
56985d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.ushl.v8i16(<8 x i16> %tmp1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
56995d0a12d3SThurston Dang  ret <8 x i16> %tmp3
57005d0a12d3SThurston Dang}
57015d0a12d3SThurston Dang
57025d0a12d3SThurston Dangdefine <4 x i32> @neon.ushll4s_constant_shift(ptr %A) nounwind sanitize_memory {
57035d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @neon.ushll4s_constant_shift(
57045d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
57055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
57065d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
57075d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5708*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
57095d0a12d3SThurston Dang; CHECK:       2:
57105d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
57115d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
57125d0a12d3SThurston Dang; CHECK:       3:
57135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
57145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
57155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
57165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
57175d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP6]], align 8
57185d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <4 x i16> [[_MSLD]] to <4 x i32>
57195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <4 x i16> [[TMP1]] to <4 x i32>
5720*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> [[_MSPROP]], <4 x i32> splat (i32 1))
57214ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
5722*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> [[TMP2]], <4 x i32> splat (i32 1))
57235d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
57245d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
57255d0a12d3SThurston Dang;
57265d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
57275d0a12d3SThurston Dang  %tmp2 = zext <4 x i16> %tmp1 to <4 x i32>
57285d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> %tmp2, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
57295d0a12d3SThurston Dang  ret <4 x i32> %tmp3
57305d0a12d3SThurston Dang}
57315d0a12d3SThurston Dang
57325d0a12d3SThurston Dang; FIXME: unnecessary ushll.4s v0, v0, #0?
57335d0a12d3SThurston Dangdefine <4 x i32> @neon.ushll4s_neg_constant_shift(ptr %A) nounwind sanitize_memory {
57345d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @neon.ushll4s_neg_constant_shift(
57355d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
57365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
57375d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
57385d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5739*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
57405d0a12d3SThurston Dang; CHECK:       2:
57415d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
57425d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
57435d0a12d3SThurston Dang; CHECK:       3:
57445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
57455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
57465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
57475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
57485d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP6]], align 8
57495d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <4 x i16> [[_MSLD]] to <4 x i32>
57505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <4 x i16> [[TMP1]] to <4 x i32>
5751*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> [[_MSPROP]], <4 x i32> splat (i32 -1))
57524ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
5753*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> [[TMP2]], <4 x i32> splat (i32 -1))
57545d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
57555d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
57565d0a12d3SThurston Dang;
57575d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
57585d0a12d3SThurston Dang  %tmp2 = zext <4 x i16> %tmp1 to <4 x i32>
57595d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> %tmp2, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>)
57605d0a12d3SThurston Dang  ret <4 x i32> %tmp3
57615d0a12d3SThurston Dang}
57625d0a12d3SThurston Dang
57635d0a12d3SThurston Dang; FIXME: should be constant folded.
57645d0a12d3SThurston Dangdefine <4 x i32> @neon.ushll4s_constant_fold() nounwind sanitize_memory {
57655d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @neon.ushll4s_constant_fold(
57665d0a12d3SThurston Dang; CHECK-SAME: ) #[[ATTR0]] {
57675d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
5768*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> zeroinitializer, <4 x i32> splat (i32 1))
57694ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = or <4 x i32> [[TMP1]], zeroinitializer
5770*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32> splat (i32 1))
57714ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i32> [[TMP2]], ptr @__msan_retval_tls, align 8
57725d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
57735d0a12d3SThurston Dang;
57745d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.ushl.v4i32(<4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
57755d0a12d3SThurston Dang  ret <4 x i32> %tmp3
57765d0a12d3SThurston Dang}
57775d0a12d3SThurston Dang
57785d0a12d3SThurston Dangdefine <2 x i64> @neon.ushll2d_constant_shift(ptr %A) nounwind sanitize_memory {
57795d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @neon.ushll2d_constant_shift(
57805d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
57815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
57825d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
57835d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5784*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
57855d0a12d3SThurston Dang; CHECK:       2:
57865d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
57875d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
57885d0a12d3SThurston Dang; CHECK:       3:
57895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
57905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
57915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
57925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
57935d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8
57945d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <2 x i32> [[_MSLD]] to <2 x i64>
57955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <2 x i32> [[TMP1]] to <2 x i64>
5796*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i64> @llvm.aarch64.neon.ushl.v2i64(<2 x i64> [[_MSPROP]], <2 x i64> splat (i64 1))
57974ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
5798*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.ushl.v2i64(<2 x i64> [[TMP2]], <2 x i64> splat (i64 1))
57995d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
58005d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
58015d0a12d3SThurston Dang;
58025d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
58035d0a12d3SThurston Dang  %tmp2 = zext <2 x i32> %tmp1 to <2 x i64>
58045d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.ushl.v2i64(<2 x i64> %tmp2, <2 x i64> <i64 1, i64 1>)
58055d0a12d3SThurston Dang  ret <2 x i64> %tmp3
58065d0a12d3SThurston Dang}
58075d0a12d3SThurston Dang
58085d0a12d3SThurston Dangdefine <1 x i64> @neon.ushl_vscalar_constant_shift(ptr %A) nounwind sanitize_memory {
58095d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @neon.ushl_vscalar_constant_shift(
58105d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
58115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
58125d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
58135d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5814*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
58155d0a12d3SThurston Dang; CHECK:       2:
58165d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
58175d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
58185d0a12d3SThurston Dang; CHECK:       3:
58195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i32>, ptr [[A]], align 4
58205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
58215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
58225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
58235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i32>, ptr [[TMP6]], align 4
58245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <1 x i32> [[_MSLD]] to <1 x i64>
58255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <1 x i32> [[TMP1]] to <1 x i64>
5826*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <1 x i64> @llvm.aarch64.neon.ushl.v1i64(<1 x i64> [[_MSPROP]], <1 x i64> splat (i64 1))
58274ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <1 x i64> [[TMP7]], zeroinitializer
5828*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.ushl.v1i64(<1 x i64> [[TMP2]], <1 x i64> splat (i64 1))
58295d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
58305d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
58315d0a12d3SThurston Dang;
58325d0a12d3SThurston Dang  %tmp1 = load <1 x i32>, ptr %A
58335d0a12d3SThurston Dang  %tmp2 = zext <1 x i32> %tmp1 to <1 x i64>
58345d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.ushl.v1i64(<1 x i64> %tmp2, <1 x i64> <i64 1>)
58355d0a12d3SThurston Dang  ret <1 x i64> %tmp3
58365d0a12d3SThurston Dang}
58375d0a12d3SThurston Dang
58385d0a12d3SThurston Dangdefine i64 @neon.ushl_scalar_constant_shift(ptr %A) nounwind sanitize_memory {
58395d0a12d3SThurston Dang; CHECK-LABEL: define i64 @neon.ushl_scalar_constant_shift(
58405d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
58415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
58425d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
58435d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5844*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
58455d0a12d3SThurston Dang; CHECK:       2:
58465d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
58475d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
58485d0a12d3SThurston Dang; CHECK:       3:
58495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A]], align 4
58505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
58515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
58525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
58535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP6]], align 4
58545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext i32 [[_MSLD]] to i64
58555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext i32 [[TMP1]] to i64
58564ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.ushl.i64(i64 [[_MSPROP]], i64 1)
58574ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or i64 [[TMP7]], 0
58585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.ushl.i64(i64 [[TMP2]], i64 1)
58595d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr @__msan_retval_tls, align 8
58605d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
58615d0a12d3SThurston Dang;
58625d0a12d3SThurston Dang  %tmp1 = load i32, ptr %A
58635d0a12d3SThurston Dang  %tmp2 = zext i32 %tmp1 to i64
58645d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.ushl.i64(i64 %tmp2, i64 1)
58655d0a12d3SThurston Dang  ret i64 %tmp3
58665d0a12d3SThurston Dang}
58675d0a12d3SThurston Dang
58685d0a12d3SThurston Dangdefine <8 x i16> @sshll8h(ptr %A) nounwind sanitize_memory {
58695d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @sshll8h(
58705d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
58715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
58725d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
58735d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5874*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
58755d0a12d3SThurston Dang; CHECK:       2:
58765d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
58775d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
58785d0a12d3SThurston Dang; CHECK:       3:
58795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
58805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
58815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
58825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
58835d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP6]], align 8
58845d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = sext <8 x i8> [[_MSLD]] to <8 x i16>
58855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = sext <8 x i8> [[TMP1]] to <8 x i16>
5886*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = shl <8 x i16> [[_MSPROP]], splat (i16 1)
58875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
5888*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <8 x i16> [[TMP2]], splat (i16 1)
58895d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[TMP8]], ptr @__msan_retval_tls, align 8
58905d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
58915d0a12d3SThurston Dang;
58925d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
58935d0a12d3SThurston Dang  %tmp2 = sext <8 x i8> %tmp1 to <8 x i16>
58945d0a12d3SThurston Dang  %tmp3 = shl <8 x i16> %tmp2, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
58955d0a12d3SThurston Dang  ret <8 x i16> %tmp3
58965d0a12d3SThurston Dang}
58975d0a12d3SThurston Dang
58985d0a12d3SThurston Dangdefine <2 x i64> @sshll2d(ptr %A) nounwind sanitize_memory {
58995d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @sshll2d(
59005d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
59015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
59025d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
59035d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5904*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
59055d0a12d3SThurston Dang; CHECK:       2:
59065d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
59075d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
59085d0a12d3SThurston Dang; CHECK:       3:
59095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
59105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
59115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
59125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
59135d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8
59145d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = sext <2 x i32> [[_MSLD]] to <2 x i64>
59155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = sext <2 x i32> [[TMP1]] to <2 x i64>
5916*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = shl <2 x i64> [[_MSPROP]], splat (i64 1)
59175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
5918*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <2 x i64> [[TMP2]], splat (i64 1)
59195d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[TMP8]], ptr @__msan_retval_tls, align 8
59205d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
59215d0a12d3SThurston Dang;
59225d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
59235d0a12d3SThurston Dang  %tmp2 = sext <2 x i32> %tmp1 to <2 x i64>
59245d0a12d3SThurston Dang  %tmp3 = shl <2 x i64> %tmp2, <i64 1, i64 1>
59255d0a12d3SThurston Dang  ret <2 x i64> %tmp3
59265d0a12d3SThurston Dang}
59275d0a12d3SThurston Dang
59285d0a12d3SThurston Dangdeclare <16 x i8> @llvm.aarch64.neon.sshl.v16i8(<16 x i8>, <16 x i8>)
59295d0a12d3SThurston Dangdeclare <8 x i16> @llvm.aarch64.neon.sshl.v8i16(<8 x i16>, <8 x i16>)
59305d0a12d3SThurston Dangdeclare <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32>, <4 x i32>)
59315d0a12d3SThurston Dangdeclare <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64>, <2 x i64>)
59325d0a12d3SThurston Dangdeclare <1 x i64> @llvm.aarch64.neon.sshl.v1i64(<1 x i64>, <1 x i64>)
59335d0a12d3SThurston Dangdeclare i64 @llvm.aarch64.neon.sshl.i64(i64, i64)
59345d0a12d3SThurston Dang
59355d0a12d3SThurston Dangdefine <16 x i8> @neon.sshl16b_constant_shift(ptr %A) nounwind sanitize_memory {
59365d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @neon.sshl16b_constant_shift(
59375d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
59385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
59395d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
59405d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5941*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
59425d0a12d3SThurston Dang; CHECK:       2:
59435d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
59445d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
59455d0a12d3SThurston Dang; CHECK:       3:
59465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
59475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
59485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
59495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
59505d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP6]], align 16
5951*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <16 x i8> @llvm.aarch64.neon.sshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> splat (i8 1))
59524ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP7]], zeroinitializer
5953*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.aarch64.neon.sshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> splat (i8 1))
59545d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
59555d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP2]]
59565d0a12d3SThurston Dang;
59575d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
59585d0a12d3SThurston Dang  %tmp2 = call <16 x i8> @llvm.aarch64.neon.sshl.v16i8(<16 x i8> %tmp1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
59595d0a12d3SThurston Dang  ret <16 x i8> %tmp2
59605d0a12d3SThurston Dang}
59615d0a12d3SThurston Dang
59625d0a12d3SThurston Dangdefine <16 x i8> @neon.sshl16b_non_splat_constant_shift(ptr %A) nounwind sanitize_memory {
59635d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @neon.sshl16b_non_splat_constant_shift(
59645d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
59655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
59665d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
59675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5968*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
59695d0a12d3SThurston Dang; CHECK:       2:
59705d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
59715d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
59725d0a12d3SThurston Dang; CHECK:       3:
59735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
59745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
59755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
59765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
59775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP6]], align 16
59784ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call <16 x i8> @llvm.aarch64.neon.sshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> <i8 6, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
59794ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP7]], zeroinitializer
59805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.aarch64.neon.sshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> <i8 6, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
59815d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
59825d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP2]]
59835d0a12d3SThurston Dang;
59845d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
59855d0a12d3SThurston Dang  %tmp2 = call <16 x i8> @llvm.aarch64.neon.sshl.v16i8(<16 x i8> %tmp1, <16 x i8> <i8 6, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
59865d0a12d3SThurston Dang  ret <16 x i8> %tmp2
59875d0a12d3SThurston Dang}
59885d0a12d3SThurston Dang
59895d0a12d3SThurston Dangdefine <16 x i8> @neon.sshl16b_neg_constant_shift(ptr %A) nounwind sanitize_memory {
59905d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @neon.sshl16b_neg_constant_shift(
59915d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
59925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
59935d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
59945d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
5995*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
59965d0a12d3SThurston Dang; CHECK:       2:
59975d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
59985d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
59995d0a12d3SThurston Dang; CHECK:       3:
60005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
60015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
60025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
60035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
60045d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP6]], align 16
6005*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <16 x i8> @llvm.aarch64.neon.sshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> splat (i8 -2))
60064ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP7]], zeroinitializer
6007*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP2:%.*]] = call <16 x i8> @llvm.aarch64.neon.sshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> splat (i8 -2))
60085d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
60095d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP2]]
60105d0a12d3SThurston Dang;
60115d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
60125d0a12d3SThurston Dang  %tmp2 = call <16 x i8> @llvm.aarch64.neon.sshl.v16i8(<16 x i8> %tmp1, <16 x i8> <i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2, i8 -2>)
60135d0a12d3SThurston Dang  ret <16 x i8> %tmp2
60145d0a12d3SThurston Dang}
60155d0a12d3SThurston Dang
60165d0a12d3SThurston Dangdefine <8 x i16> @neon.sshll8h_constant_shift(ptr %A) nounwind sanitize_memory {
60175d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @neon.sshll8h_constant_shift(
60185d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
60195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
60205d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
60215d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6022*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
60235d0a12d3SThurston Dang; CHECK:       2:
60245d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
60255d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
60265d0a12d3SThurston Dang; CHECK:       3:
60275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
60285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
60295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
60305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
60315d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP6]], align 8
60325d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = sext <8 x i8> [[_MSLD]] to <8 x i16>
60335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = sext <8 x i8> [[TMP1]] to <8 x i16>
6034*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i16> @llvm.aarch64.neon.sshl.v8i16(<8 x i16> [[_MSPROP]], <8 x i16> splat (i16 1))
60354ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
6036*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.sshl.v8i16(<8 x i16> [[TMP2]], <8 x i16> splat (i16 1))
60375d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
60385d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
60395d0a12d3SThurston Dang;
60405d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
60415d0a12d3SThurston Dang  %tmp2 = sext <8 x i8> %tmp1 to <8 x i16>
60425d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.sshl.v8i16(<8 x i16> %tmp2, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
60435d0a12d3SThurston Dang  ret <8 x i16> %tmp3
60445d0a12d3SThurston Dang}
60455d0a12d3SThurston Dang
60465d0a12d3SThurston Dangdefine <4 x i32> @neon.sshl4s_wrong_ext_constant_shift(ptr %A) nounwind sanitize_memory {
60475d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @neon.sshl4s_wrong_ext_constant_shift(
60485d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
60495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
60505d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
60515d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6052*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
60535d0a12d3SThurston Dang; CHECK:       2:
60545d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
60555d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
60565d0a12d3SThurston Dang; CHECK:       3:
60575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i8>, ptr [[A]], align 4
60585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
60595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
60605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
60615d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i8>, ptr [[TMP6]], align 4
60625d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = sext <4 x i8> [[_MSLD]] to <4 x i32>
60635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = sext <4 x i8> [[TMP1]] to <4 x i32>
6064*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> [[_MSPROP]], <4 x i32> splat (i32 1))
60654ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
6066*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> [[TMP2]], <4 x i32> splat (i32 1))
60675d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
60685d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
60695d0a12d3SThurston Dang;
60705d0a12d3SThurston Dang  %tmp1 = load <4 x i8>, ptr %A
60715d0a12d3SThurston Dang  %tmp2 = sext <4 x i8> %tmp1 to <4 x i32>
60725d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> %tmp2, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
60735d0a12d3SThurston Dang  ret <4 x i32> %tmp3
60745d0a12d3SThurston Dang}
60755d0a12d3SThurston Dang
60765d0a12d3SThurston Dangdefine <4 x i32> @neon.sshll4s_constant_shift(ptr %A) nounwind sanitize_memory {
60775d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @neon.sshll4s_constant_shift(
60785d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
60795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
60805d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
60815d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6082*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
60835d0a12d3SThurston Dang; CHECK:       2:
60845d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
60855d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
60865d0a12d3SThurston Dang; CHECK:       3:
60875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
60885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
60895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
60905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
60915d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP6]], align 8
60925d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = sext <4 x i16> [[_MSLD]] to <4 x i32>
60935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = sext <4 x i16> [[TMP1]] to <4 x i32>
6094*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> [[_MSPROP]], <4 x i32> splat (i32 1))
60954ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
6096*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> [[TMP2]], <4 x i32> splat (i32 1))
60975d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
60985d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
60995d0a12d3SThurston Dang;
61005d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
61015d0a12d3SThurston Dang  %tmp2 = sext <4 x i16> %tmp1 to <4 x i32>
61025d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> %tmp2, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
61035d0a12d3SThurston Dang  ret <4 x i32> %tmp3
61045d0a12d3SThurston Dang}
61055d0a12d3SThurston Dang
61065d0a12d3SThurston Dangdefine <4 x i32> @neon.sshll4s_neg_constant_shift(ptr %A) nounwind sanitize_memory {
61075d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @neon.sshll4s_neg_constant_shift(
61085d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
61095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
61105d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
61115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6112*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
61135d0a12d3SThurston Dang; CHECK:       2:
61145d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
61155d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
61165d0a12d3SThurston Dang; CHECK:       3:
61175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
61185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
61195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
61205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
61215d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP6]], align 8
61225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = sext <4 x i16> [[_MSLD]] to <4 x i32>
61235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = sext <4 x i16> [[TMP1]] to <4 x i32>
6124*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> [[_MSPROP]], <4 x i32> splat (i32 -1))
61254ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
6126*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> [[TMP2]], <4 x i32> splat (i32 -1))
61275d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
61285d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
61295d0a12d3SThurston Dang;
61305d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
61315d0a12d3SThurston Dang  %tmp2 = sext <4 x i16> %tmp1 to <4 x i32>
61325d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> %tmp2, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>)
61335d0a12d3SThurston Dang  ret <4 x i32> %tmp3
61345d0a12d3SThurston Dang}
61355d0a12d3SThurston Dang
61365d0a12d3SThurston Dang; FIXME: should be constant folded.
61375d0a12d3SThurston Dangdefine <4 x i32> @neon.sshl4s_constant_fold() nounwind sanitize_memory {
61385d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @neon.sshl4s_constant_fold(
61395d0a12d3SThurston Dang; CHECK-SAME: ) #[[ATTR0]] {
61405d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
6141*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> zeroinitializer, <4 x i32> splat (i32 2))
61424ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = or <4 x i32> [[TMP1]], zeroinitializer
6143*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32> splat (i32 2))
61444ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i32> [[TMP2]], ptr @__msan_retval_tls, align 8
61455d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
61465d0a12d3SThurston Dang;
61475d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> <i32 0, i32 1, i32 2, i32 3>, <4 x i32> <i32 2, i32 2, i32 2, i32 2>)
61485d0a12d3SThurston Dang  ret <4 x i32> %tmp3
61495d0a12d3SThurston Dang}
61505d0a12d3SThurston Dang
61515d0a12d3SThurston Dangdefine <4 x i32> @neon.sshl4s_no_fold(ptr %A) nounwind sanitize_memory {
61525d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @neon.sshl4s_no_fold(
61535d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
61545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
61555d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
61565d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6157*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
61585d0a12d3SThurston Dang; CHECK:       2:
61595d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
61605d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
61615d0a12d3SThurston Dang; CHECK:       3:
61625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
61635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
61645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
61655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
61665d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
6167*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> splat (i32 1))
61684ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
6169*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> splat (i32 1))
61705d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
61715d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
61725d0a12d3SThurston Dang;
61735d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
61745d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.sshl.v4i32(<4 x i32> %tmp1, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
61755d0a12d3SThurston Dang  ret <4 x i32> %tmp3
61765d0a12d3SThurston Dang}
61775d0a12d3SThurston Dang
61785d0a12d3SThurston Dangdefine <2 x i64> @neon.sshll2d_constant_shift(ptr %A) nounwind sanitize_memory {
61795d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @neon.sshll2d_constant_shift(
61805d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
61815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
61825d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
61835d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6184*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
61855d0a12d3SThurston Dang; CHECK:       2:
61865d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
61875d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
61885d0a12d3SThurston Dang; CHECK:       3:
61895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
61905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
61915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
61925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
61935d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8
61945d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = sext <2 x i32> [[_MSLD]] to <2 x i64>
61955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = sext <2 x i32> [[TMP1]] to <2 x i64>
6196*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> [[_MSPROP]], <2 x i64> splat (i64 1))
61974ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
6198*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> [[TMP2]], <2 x i64> splat (i64 1))
61995d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
62005d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
62015d0a12d3SThurston Dang;
62025d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
62035d0a12d3SThurston Dang  %tmp2 = sext <2 x i32> %tmp1 to <2 x i64>
62045d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> %tmp2, <2 x i64> <i64 1, i64 1>)
62055d0a12d3SThurston Dang  ret <2 x i64> %tmp3
62065d0a12d3SThurston Dang}
62075d0a12d3SThurston Dang
62085d0a12d3SThurston Dangdefine <1 x i64> @neon.sshll_vscalar_constant_shift(ptr %A) nounwind sanitize_memory {
62095d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @neon.sshll_vscalar_constant_shift(
62105d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
62115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
62125d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
62135d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6214*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
62155d0a12d3SThurston Dang; CHECK:       2:
62165d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
62175d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
62185d0a12d3SThurston Dang; CHECK:       3:
62195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i32>, ptr [[A]], align 4
62205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
62215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
62225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
62235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i32>, ptr [[TMP6]], align 4
62245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <1 x i32> [[_MSLD]] to <1 x i64>
62255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext <1 x i32> [[TMP1]] to <1 x i64>
6226*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <1 x i64> @llvm.aarch64.neon.sshl.v1i64(<1 x i64> [[_MSPROP]], <1 x i64> splat (i64 1))
62274ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <1 x i64> [[TMP7]], zeroinitializer
6228*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.sshl.v1i64(<1 x i64> [[TMP2]], <1 x i64> splat (i64 1))
62295d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP1]], ptr @__msan_retval_tls, align 8
62305d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
62315d0a12d3SThurston Dang;
62325d0a12d3SThurston Dang  %tmp1 = load <1 x i32>, ptr %A
62335d0a12d3SThurston Dang  %tmp2 = zext <1 x i32> %tmp1 to <1 x i64>
62345d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.sshl.v1i64(<1 x i64> %tmp2, <1 x i64> <i64 1>)
62355d0a12d3SThurston Dang  ret <1 x i64> %tmp3
62365d0a12d3SThurston Dang}
62375d0a12d3SThurston Dang
62385d0a12d3SThurston Dangdefine i64 @neon.sshll_scalar_constant_shift(ptr %A) nounwind sanitize_memory {
62395d0a12d3SThurston Dang; CHECK-LABEL: define i64 @neon.sshll_scalar_constant_shift(
62405d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
62415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
62425d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
62435d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6244*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
62455d0a12d3SThurston Dang; CHECK:       2:
62465d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
62475d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
62485d0a12d3SThurston Dang; CHECK:       3:
62495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A]], align 4
62505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
62515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
62525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
62535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP6]], align 4
62545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext i32 [[_MSLD]] to i64
62555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext i32 [[TMP1]] to i64
62564ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.sshl.i64(i64 [[_MSPROP]], i64 1)
62574ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or i64 [[TMP7]], 0
62585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.sshl.i64(i64 [[TMP2]], i64 1)
62595d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr @__msan_retval_tls, align 8
62605d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
62615d0a12d3SThurston Dang;
62625d0a12d3SThurston Dang  %tmp1 = load i32, ptr %A
62635d0a12d3SThurston Dang  %tmp2 = zext i32 %tmp1 to i64
62645d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.sshl.i64(i64 %tmp2, i64 1)
62655d0a12d3SThurston Dang  ret i64 %tmp3
62665d0a12d3SThurston Dang}
62675d0a12d3SThurston Dang
62685d0a12d3SThurston Dangdefine i64 @neon.sshll_scalar_constant_shift_m1(ptr %A) nounwind sanitize_memory {
62695d0a12d3SThurston Dang; CHECK-LABEL: define i64 @neon.sshll_scalar_constant_shift_m1(
62705d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
62715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
62725d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
62735d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6274*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
62755d0a12d3SThurston Dang; CHECK:       2:
62765d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
62775d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
62785d0a12d3SThurston Dang; CHECK:       3:
62795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i32, ptr [[A]], align 4
62805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
62815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
62825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
62835d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP6]], align 4
62845d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext i32 [[_MSLD]] to i64
62855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = zext i32 [[TMP1]] to i64
62864ce559d0SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = call i64 @llvm.aarch64.neon.sshl.i64(i64 [[_MSPROP]], i64 -1)
62874ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or i64 [[TMP7]], 0
62885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.sshl.i64(i64 [[TMP2]], i64 -1)
62895d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr @__msan_retval_tls, align 8
62905d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP3]]
62915d0a12d3SThurston Dang;
62925d0a12d3SThurston Dang  %tmp1 = load i32, ptr %A
62935d0a12d3SThurston Dang  %tmp2 = zext i32 %tmp1 to i64
62945d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.sshl.i64(i64 %tmp2, i64 -1)
62955d0a12d3SThurston Dang  ret i64 %tmp3
62965d0a12d3SThurston Dang}
62975d0a12d3SThurston Dang
62985d0a12d3SThurston Dang; FIXME: should be constant folded.
62995d0a12d3SThurston Dangdefine <2 x i64> @neon.sshl2d_constant_fold() nounwind sanitize_memory {
63005d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @neon.sshl2d_constant_fold(
63015d0a12d3SThurston Dang; CHECK-SAME: ) #[[ATTR0]] {
63025d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
6303*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP1:%.*]] = call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> zeroinitializer, <2 x i64> splat (i64 1))
63044ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = or <2 x i64> [[TMP1]], zeroinitializer
6305*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> <i64 99, i64 1000>, <2 x i64> splat (i64 1))
63064ce559d0SThurston Dang; CHECK-NEXT:    store <2 x i64> [[TMP2]], ptr @__msan_retval_tls, align 8
63075d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
63085d0a12d3SThurston Dang;
63095d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> <i64 99, i64 1000>, <2 x i64> <i64 1, i64 1>)
63105d0a12d3SThurston Dang  ret <2 x i64> %tmp3
63115d0a12d3SThurston Dang}
63125d0a12d3SThurston Dang
63135d0a12d3SThurston Dangdefine <2 x i64> @neon.sshl2d_no_fold(ptr %A) nounwind sanitize_memory {
63145d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @neon.sshl2d_no_fold(
63155d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
63165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
63175d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
63185d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6319*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
63205d0a12d3SThurston Dang; CHECK:       2:
63215d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
63225d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
63235d0a12d3SThurston Dang; CHECK:       3:
63245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr [[A]], align 16
63255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
63265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
63275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
63285d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
6329*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> splat (i64 2))
63304ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
6331*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> [[TMP2]], <2 x i64> splat (i64 2))
63325d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
63335d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
63345d0a12d3SThurston Dang;
63355d0a12d3SThurston Dang  %tmp2 = load <2 x i64>, ptr %A
63365d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> %tmp2, <2 x i64> <i64 2, i64 2>)
63375d0a12d3SThurston Dang  ret <2 x i64> %tmp3
63385d0a12d3SThurston Dang}
63395d0a12d3SThurston Dang
63405d0a12d3SThurston Dangdefine <8 x i16> @sshll2_8h(ptr %A) nounwind sanitize_memory {
63415d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @sshll2_8h(
63425d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
63435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
63445d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
63455d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6346*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
63475d0a12d3SThurston Dang; CHECK:       2:
63485d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
63495d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
63505d0a12d3SThurston Dang; CHECK:       3:
63515d0a12d3SThurston Dang; CHECK-NEXT:    [[LOAD1:%.*]] = load <16 x i8>, ptr [[A]], align 16
63525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
63535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
63545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
63555d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP6]], align 16
6356*38fffa63SPaul Walker; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <16 x i8> [[_MSLD]], <16 x i8> splat (i8 -1), <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
63575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <16 x i8> [[LOAD1]], <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
63585d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = sext <8 x i8> [[_MSPROP]] to <8 x i16>
63595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = sext <8 x i8> [[TMP1]] to <8 x i16>
6360*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = shl <8 x i16> [[_MSPROP1]], splat (i16 1)
63615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
6362*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <8 x i16> [[TMP2]], splat (i16 1)
63635d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[TMP8]], ptr @__msan_retval_tls, align 8
63645d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
63655d0a12d3SThurston Dang;
63665d0a12d3SThurston Dang  %load1 = load <16 x i8>, ptr %A
63675d0a12d3SThurston Dang  %tmp1 = shufflevector <16 x i8> %load1, <16 x i8> undef, <8 x i32> <i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>
63685d0a12d3SThurston Dang  %tmp2 = sext <8 x i8> %tmp1 to <8 x i16>
63695d0a12d3SThurston Dang  %tmp3 = shl <8 x i16> %tmp2, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
63705d0a12d3SThurston Dang  ret <8 x i16> %tmp3
63715d0a12d3SThurston Dang}
63725d0a12d3SThurston Dang
63735d0a12d3SThurston Dangdefine <4 x i32> @sshll2_4s(ptr %A) nounwind sanitize_memory {
63745d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @sshll2_4s(
63755d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
63765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
63775d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
63785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6379*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
63805d0a12d3SThurston Dang; CHECK:       2:
63815d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
63825d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
63835d0a12d3SThurston Dang; CHECK:       3:
63845d0a12d3SThurston Dang; CHECK-NEXT:    [[LOAD1:%.*]] = load <8 x i16>, ptr [[A]], align 16
63855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
63865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
63875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
63885d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
6389*38fffa63SPaul Walker; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <8 x i16> [[_MSLD]], <8 x i16> splat (i16 -1), <4 x i32> <i32 4, i32 5, i32 6, i32 7>
63905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <8 x i16> [[LOAD1]], <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
63915d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = sext <4 x i16> [[_MSPROP]] to <4 x i32>
63925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = sext <4 x i16> [[TMP1]] to <4 x i32>
6393*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = shl <4 x i32> [[_MSPROP1]], splat (i32 1)
63945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
6395*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <4 x i32> [[TMP2]], splat (i32 1)
63965d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[TMP8]], ptr @__msan_retval_tls, align 8
63975d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
63985d0a12d3SThurston Dang;
63995d0a12d3SThurston Dang  %load1 = load <8 x i16>, ptr %A
64005d0a12d3SThurston Dang  %tmp1 = shufflevector <8 x i16> %load1, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
64015d0a12d3SThurston Dang  %tmp2 = sext <4 x i16> %tmp1 to <4 x i32>
64025d0a12d3SThurston Dang  %tmp3 = shl <4 x i32> %tmp2, <i32 1, i32 1, i32 1, i32 1>
64035d0a12d3SThurston Dang  ret <4 x i32> %tmp3
64045d0a12d3SThurston Dang}
64055d0a12d3SThurston Dang
64065d0a12d3SThurston Dangdefine <2 x i64> @sshll2_2d(ptr %A) nounwind sanitize_memory {
64075d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @sshll2_2d(
64085d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
64095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
64105d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
64115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6412*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
64135d0a12d3SThurston Dang; CHECK:       2:
64145d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
64155d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
64165d0a12d3SThurston Dang; CHECK:       3:
64175d0a12d3SThurston Dang; CHECK-NEXT:    [[LOAD1:%.*]] = load <4 x i32>, ptr [[A]], align 16
64185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
64195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
64205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
64215d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
6422*38fffa63SPaul Walker; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <4 x i32> [[_MSLD]], <4 x i32> splat (i32 -1), <2 x i32> <i32 2, i32 3>
64235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <4 x i32> [[LOAD1]], <4 x i32> undef, <2 x i32> <i32 2, i32 3>
64245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = sext <2 x i32> [[_MSPROP]] to <2 x i64>
64255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = sext <2 x i32> [[TMP1]] to <2 x i64>
6426*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = shl <2 x i64> [[_MSPROP1]], splat (i64 1)
64275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
6428*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <2 x i64> [[TMP2]], splat (i64 1)
64295d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[TMP8]], ptr @__msan_retval_tls, align 8
64305d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
64315d0a12d3SThurston Dang;
64325d0a12d3SThurston Dang  %load1 = load <4 x i32>, ptr %A
64335d0a12d3SThurston Dang  %tmp1 = shufflevector <4 x i32> %load1, <4 x i32> undef, <2 x i32> <i32 2, i32 3>
64345d0a12d3SThurston Dang  %tmp2 = sext <2 x i32> %tmp1 to <2 x i64>
64355d0a12d3SThurston Dang  %tmp3 = shl <2 x i64> %tmp2, <i64 1, i64 1>
64365d0a12d3SThurston Dang  ret <2 x i64> %tmp3
64375d0a12d3SThurston Dang}
64385d0a12d3SThurston Dang
64395d0a12d3SThurston Dangdefine <8 x i8> @sqshli8b(ptr %A) nounwind sanitize_memory {
64405d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @sqshli8b(
64415d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
64425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
64435d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
64445d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6445*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
64465d0a12d3SThurston Dang; CHECK:       2:
64475d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
64485d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
64495d0a12d3SThurston Dang; CHECK:       3:
64505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
64515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
64525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
64535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
64545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP6]], align 8
6455*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> splat (i8 1))
64564ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
6457*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> splat (i8 1))
64585d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
64595d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
64605d0a12d3SThurston Dang;
64615d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
64625d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.sqshl.v8i8(<8 x i8> %tmp1, <8 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
64635d0a12d3SThurston Dang  ret <8 x i8> %tmp3
64645d0a12d3SThurston Dang}
64655d0a12d3SThurston Dang
64665d0a12d3SThurston Dangdefine <4 x i16> @sqshli4h(ptr %A) nounwind sanitize_memory {
64675d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @sqshli4h(
64685d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
64695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
64705d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
64715d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6472*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
64735d0a12d3SThurston Dang; CHECK:       2:
64745d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
64755d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
64765d0a12d3SThurston Dang; CHECK:       3:
64775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
64785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
64795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
64805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
64815d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP6]], align 8
6482*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> splat (i16 1))
64834ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
6484*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> splat (i16 1))
64855d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
64865d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
64875d0a12d3SThurston Dang;
64885d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
64895d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.sqshl.v4i16(<4 x i16> %tmp1, <4 x i16> <i16 1, i16 1, i16 1, i16 1>)
64905d0a12d3SThurston Dang  ret <4 x i16> %tmp3
64915d0a12d3SThurston Dang}
64925d0a12d3SThurston Dang
64935d0a12d3SThurston Dangdefine <2 x i32> @sqshli2s(ptr %A) nounwind sanitize_memory {
64945d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @sqshli2s(
64955d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
64965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
64975d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
64985d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6499*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
65005d0a12d3SThurston Dang; CHECK:       2:
65015d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
65025d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
65035d0a12d3SThurston Dang; CHECK:       3:
65045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
65055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
65065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
65075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
65085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8
6509*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> splat (i32 1))
65104ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
6511*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> splat (i32 1))
65125d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
65135d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
65145d0a12d3SThurston Dang;
65155d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
65165d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.sqshl.v2i32(<2 x i32> %tmp1, <2 x i32> <i32 1, i32 1>)
65175d0a12d3SThurston Dang  ret <2 x i32> %tmp3
65185d0a12d3SThurston Dang}
65195d0a12d3SThurston Dang
65205d0a12d3SThurston Dangdefine <16 x i8> @sqshli16b(ptr %A) nounwind sanitize_memory {
65215d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @sqshli16b(
65225d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
65235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
65245d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
65255d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6526*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
65275d0a12d3SThurston Dang; CHECK:       2:
65285d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
65295d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
65305d0a12d3SThurston Dang; CHECK:       3:
65315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
65325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
65335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
65345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
65355d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP6]], align 16
6536*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> splat (i8 1))
65374ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP7]], zeroinitializer
6538*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> splat (i8 1))
65395d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
65405d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
65415d0a12d3SThurston Dang;
65425d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
65435d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.sqshl.v16i8(<16 x i8> %tmp1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
65445d0a12d3SThurston Dang  ret <16 x i8> %tmp3
65455d0a12d3SThurston Dang}
65465d0a12d3SThurston Dang
65475d0a12d3SThurston Dangdefine <8 x i16> @sqshli8h(ptr %A) nounwind sanitize_memory {
65485d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @sqshli8h(
65495d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
65505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
65515d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
65525d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6553*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
65545d0a12d3SThurston Dang; CHECK:       2:
65555d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
65565d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
65575d0a12d3SThurston Dang; CHECK:       3:
65585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
65595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
65605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
65615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
65625d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
6563*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> splat (i16 1))
65644ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
6565*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> splat (i16 1))
65665d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
65675d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
65685d0a12d3SThurston Dang;
65695d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
65705d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.sqshl.v8i16(<8 x i16> %tmp1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
65715d0a12d3SThurston Dang  ret <8 x i16> %tmp3
65725d0a12d3SThurston Dang}
65735d0a12d3SThurston Dang
65745d0a12d3SThurston Dangdefine <4 x i32> @sqshli4s(ptr %A) nounwind sanitize_memory {
65755d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @sqshli4s(
65765d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
65775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
65785d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
65795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6580*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
65815d0a12d3SThurston Dang; CHECK:       2:
65825d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
65835d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
65845d0a12d3SThurston Dang; CHECK:       3:
65855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
65865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
65875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
65885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
65895d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
6590*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> splat (i32 1))
65914ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
6592*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> splat (i32 1))
65935d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
65945d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
65955d0a12d3SThurston Dang;
65965d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
65975d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.sqshl.v4i32(<4 x i32> %tmp1, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
65985d0a12d3SThurston Dang  ret <4 x i32> %tmp3
65995d0a12d3SThurston Dang}
66005d0a12d3SThurston Dang
66015d0a12d3SThurston Dangdefine <2 x i64> @sqshli2d(ptr %A) nounwind sanitize_memory {
66025d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @sqshli2d(
66035d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
66045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
66055d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
66065d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6607*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
66085d0a12d3SThurston Dang; CHECK:       2:
66095d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
66105d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
66115d0a12d3SThurston Dang; CHECK:       3:
66125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
66135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
66145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
66155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
66165d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
6617*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> splat (i64 1))
66184ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
6619*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> splat (i64 1))
66205d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
66215d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
66225d0a12d3SThurston Dang;
66235d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
66245d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64> %tmp1, <2 x i64> <i64 1, i64 1>)
66255d0a12d3SThurston Dang  ret <2 x i64> %tmp3
66265d0a12d3SThurston Dang}
66275d0a12d3SThurston Dang
66285d0a12d3SThurston Dangdefine <8 x i8> @uqshli8b(ptr %A) nounwind sanitize_memory {
66295d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @uqshli8b(
66305d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
66315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
66325d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
66335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6634*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
66355d0a12d3SThurston Dang; CHECK:       2:
66365d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
66375d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
66385d0a12d3SThurston Dang; CHECK:       3:
66395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
66405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
66415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
66425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
66435d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP6]], align 8
6644*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> splat (i8 1))
66454ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
6646*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> splat (i8 1))
66475d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
66485d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
66495d0a12d3SThurston Dang;
66505d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
66515d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.uqshl.v8i8(<8 x i8> %tmp1, <8 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
66525d0a12d3SThurston Dang  ret <8 x i8> %tmp3
66535d0a12d3SThurston Dang}
66545d0a12d3SThurston Dang
66555d0a12d3SThurston Dangdefine <8 x i8> @uqshli8b_1(ptr %A) nounwind sanitize_memory {
66565d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @uqshli8b_1(
66575d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
66585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
66595d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
66605d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6661*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
66625d0a12d3SThurston Dang; CHECK:       2:
66635d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
66645d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
66655d0a12d3SThurston Dang; CHECK:       3:
66665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
66675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
66685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
66695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
66705d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP6]], align 8
6671*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> splat (i8 8))
66724ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP7]], zeroinitializer
6673*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.uqshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> splat (i8 8))
66745d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
66755d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
66765d0a12d3SThurston Dang;
66775d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
66785d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.uqshl.v8i8(<8 x i8> %tmp1, <8 x i8> <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>)
66795d0a12d3SThurston Dang  ret <8 x i8> %tmp3
66805d0a12d3SThurston Dang}
66815d0a12d3SThurston Dang
66825d0a12d3SThurston Dangdefine <4 x i16> @uqshli4h(ptr %A) nounwind sanitize_memory {
66835d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @uqshli4h(
66845d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
66855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
66865d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
66875d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6688*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
66895d0a12d3SThurston Dang; CHECK:       2:
66905d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
66915d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
66925d0a12d3SThurston Dang; CHECK:       3:
66935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
66945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
66955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
66965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
66975d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP6]], align 8
6698*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> splat (i16 1))
66994ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP7]], zeroinitializer
6700*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.uqshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> splat (i16 1))
67015d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
67025d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
67035d0a12d3SThurston Dang;
67045d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
67055d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.uqshl.v4i16(<4 x i16> %tmp1, <4 x i16> <i16 1, i16 1, i16 1, i16 1>)
67065d0a12d3SThurston Dang  ret <4 x i16> %tmp3
67075d0a12d3SThurston Dang}
67085d0a12d3SThurston Dang
67095d0a12d3SThurston Dangdefine <2 x i32> @uqshli2s(ptr %A) nounwind sanitize_memory {
67105d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @uqshli2s(
67115d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
67125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
67135d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
67145d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6715*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
67165d0a12d3SThurston Dang; CHECK:       2:
67175d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
67185d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
67195d0a12d3SThurston Dang; CHECK:       3:
67205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
67215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
67225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
67235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
67245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8
6725*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> splat (i32 1))
67264ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP7]], zeroinitializer
6727*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.uqshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> splat (i32 1))
67285d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
67295d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
67305d0a12d3SThurston Dang;
67315d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
67325d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.uqshl.v2i32(<2 x i32> %tmp1, <2 x i32> <i32 1, i32 1>)
67335d0a12d3SThurston Dang  ret <2 x i32> %tmp3
67345d0a12d3SThurston Dang}
67355d0a12d3SThurston Dang
67365d0a12d3SThurston Dangdefine <16 x i8> @uqshli16b(ptr %A) nounwind sanitize_memory {
67375d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @uqshli16b(
67385d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
67395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
67405d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
67415d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6742*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
67435d0a12d3SThurston Dang; CHECK:       2:
67445d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
67455d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
67465d0a12d3SThurston Dang; CHECK:       3:
67475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
67485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
67495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
67505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
67515d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP6]], align 16
6752*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <16 x i8> @llvm.aarch64.neon.uqshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> splat (i8 1))
67534ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP7]], zeroinitializer
6754*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.uqshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> splat (i8 1))
67555d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
67565d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
67575d0a12d3SThurston Dang;
67585d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
67595d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.uqshl.v16i8(<16 x i8> %tmp1, <16 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>)
67605d0a12d3SThurston Dang  ret <16 x i8> %tmp3
67615d0a12d3SThurston Dang}
67625d0a12d3SThurston Dang
67635d0a12d3SThurston Dangdefine <8 x i16> @uqshli8h(ptr %A) nounwind sanitize_memory {
67645d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @uqshli8h(
67655d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
67665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
67675d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
67685d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6769*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
67705d0a12d3SThurston Dang; CHECK:       2:
67715d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
67725d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
67735d0a12d3SThurston Dang; CHECK:       3:
67745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
67755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
67765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
67775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
67785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP6]], align 16
6779*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <8 x i16> @llvm.aarch64.neon.uqshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> splat (i16 1))
67804ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP7]], zeroinitializer
6781*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.uqshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> splat (i16 1))
67825d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
67835d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
67845d0a12d3SThurston Dang;
67855d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
67865d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.uqshl.v8i16(<8 x i16> %tmp1, <8 x i16> <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>)
67875d0a12d3SThurston Dang  ret <8 x i16> %tmp3
67885d0a12d3SThurston Dang}
67895d0a12d3SThurston Dang
67905d0a12d3SThurston Dangdefine <4 x i32> @uqshli4s(ptr %A) nounwind sanitize_memory {
67915d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @uqshli4s(
67925d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
67935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
67945d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
67955d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6796*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
67975d0a12d3SThurston Dang; CHECK:       2:
67985d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
67995d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
68005d0a12d3SThurston Dang; CHECK:       3:
68015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
68025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
68035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
68045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
68055d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP6]], align 16
6806*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <4 x i32> @llvm.aarch64.neon.uqshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> splat (i32 1))
68074ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP7]], zeroinitializer
6808*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.uqshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> splat (i32 1))
68095d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
68105d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
68115d0a12d3SThurston Dang;
68125d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
68135d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.uqshl.v4i32(<4 x i32> %tmp1, <4 x i32> <i32 1, i32 1, i32 1, i32 1>)
68145d0a12d3SThurston Dang  ret <4 x i32> %tmp3
68155d0a12d3SThurston Dang}
68165d0a12d3SThurston Dang
68175d0a12d3SThurston Dangdefine <2 x i64> @uqshli2d(ptr %A) nounwind sanitize_memory {
68185d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @uqshli2d(
68195d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {
68205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
68215d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
68225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6823*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]
68245d0a12d3SThurston Dang; CHECK:       2:
68255d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
68265d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
68275d0a12d3SThurston Dang; CHECK:       3:
68285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
68295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64
68305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576
68315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr
68325d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP6]], align 16
6833*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP7:%.*]] = call <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> splat (i64 1))
68344ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP7]], zeroinitializer
6835*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> splat (i64 1))
68365d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
68375d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
68385d0a12d3SThurston Dang;
68395d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
68405d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64> %tmp1, <2 x i64> <i64 1, i64 1>)
68415d0a12d3SThurston Dang  ret <2 x i64> %tmp3
68425d0a12d3SThurston Dang}
68435d0a12d3SThurston Dang
68445d0a12d3SThurston Dangdefine <8 x i8> @ursra8b(ptr %A, ptr %B) nounwind sanitize_memory {
68455d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @ursra8b(
68465d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
68475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
68485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
68495d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
68505d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6851*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
68525d0a12d3SThurston Dang; CHECK:       3:
68535d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
68545d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
68555d0a12d3SThurston Dang; CHECK:       4:
68565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
68575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
68585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
68595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
68605d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
6861*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <8 x i8> @llvm.aarch64.neon.urshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> splat (i8 -1))
68624ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP8]], zeroinitializer
6863*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.urshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> splat (i8 -1))
68645d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
6865*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
68664ce559d0SThurston Dang; CHECK:       10:
68675d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
68685d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
68694ce559d0SThurston Dang; CHECK:       11:
68705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i8>, ptr [[B]], align 8
68715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
68725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
68735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
68745d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP12]], align 8
68755d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <8 x i8> [[_MSPROP]], [[_MSLD1]]
68765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <8 x i8> [[TMP3]], [[TMP4]]
68775d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
68785d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP5]]
68795d0a12d3SThurston Dang;
68805d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
68815d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.urshl.v8i8(<8 x i8> %tmp1, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
68825d0a12d3SThurston Dang  %tmp4 = load <8 x i8>, ptr %B
68835d0a12d3SThurston Dang  %tmp5 = add <8 x i8> %tmp3, %tmp4
68845d0a12d3SThurston Dang  ret <8 x i8> %tmp5
68855d0a12d3SThurston Dang}
68865d0a12d3SThurston Dang
68875d0a12d3SThurston Dangdefine <4 x i16> @ursra4h(ptr %A, ptr %B) nounwind sanitize_memory {
68885d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @ursra4h(
68895d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
68905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
68915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
68925d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
68935d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6894*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
68955d0a12d3SThurston Dang; CHECK:       3:
68965d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
68975d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
68985d0a12d3SThurston Dang; CHECK:       4:
68995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
69005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
69015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
69025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
69035d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
6904*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> splat (i16 -1))
69054ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP8]], zeroinitializer
6906*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> splat (i16 -1))
69075d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
6908*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
69094ce559d0SThurston Dang; CHECK:       10:
69105d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
69115d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
69124ce559d0SThurston Dang; CHECK:       11:
69135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i16>, ptr [[B]], align 8
69145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
69155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
69165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
69175d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP12]], align 8
69185d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <4 x i16> [[_MSPROP]], [[_MSLD1]]
69195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <4 x i16> [[TMP3]], [[TMP4]]
69205d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
69215d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP5]]
69225d0a12d3SThurston Dang;
69235d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
69245d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.urshl.v4i16(<4 x i16> %tmp1, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>)
69255d0a12d3SThurston Dang  %tmp4 = load <4 x i16>, ptr %B
69265d0a12d3SThurston Dang  %tmp5 = add <4 x i16> %tmp3, %tmp4
69275d0a12d3SThurston Dang  ret <4 x i16> %tmp5
69285d0a12d3SThurston Dang}
69295d0a12d3SThurston Dang
69305d0a12d3SThurston Dangdefine <2 x i32> @ursra2s(ptr %A, ptr %B) nounwind sanitize_memory {
69315d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @ursra2s(
69325d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
69335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
69345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
69355d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
69365d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6937*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
69385d0a12d3SThurston Dang; CHECK:       3:
69395d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
69405d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
69415d0a12d3SThurston Dang; CHECK:       4:
69425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
69435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
69445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
69455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
69465d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
6947*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> splat (i32 -1))
69484ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP8]], zeroinitializer
6949*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> splat (i32 -1))
69505d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
6951*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
69524ce559d0SThurston Dang; CHECK:       10:
69535d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
69545d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
69554ce559d0SThurston Dang; CHECK:       11:
69565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i32>, ptr [[B]], align 8
69575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
69585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
69595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
69605d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP12]], align 8
69615d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <2 x i32> [[_MSPROP]], [[_MSLD1]]
69625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <2 x i32> [[TMP3]], [[TMP4]]
69635d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
69645d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP5]]
69655d0a12d3SThurston Dang;
69665d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
69675d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.urshl.v2i32(<2 x i32> %tmp1, <2 x i32> <i32 -1, i32 -1>)
69685d0a12d3SThurston Dang  %tmp4 = load <2 x i32>, ptr %B
69695d0a12d3SThurston Dang  %tmp5 = add <2 x i32> %tmp3, %tmp4
69705d0a12d3SThurston Dang  ret <2 x i32> %tmp5
69715d0a12d3SThurston Dang}
69725d0a12d3SThurston Dang
69735d0a12d3SThurston Dangdefine <16 x i8> @ursra16b(ptr %A, ptr %B) nounwind sanitize_memory {
69745d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @ursra16b(
69755d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
69765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
69775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
69785d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
69795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
6980*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
69815d0a12d3SThurston Dang; CHECK:       3:
69825d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
69835d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
69845d0a12d3SThurston Dang; CHECK:       4:
69855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
69865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
69875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
69885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
69895d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
6990*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> splat (i8 -1))
69914ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP8]], zeroinitializer
6992*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> splat (i8 -1))
69935d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
6994*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
69954ce559d0SThurston Dang; CHECK:       10:
69965d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
69975d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
69984ce559d0SThurston Dang; CHECK:       11:
69995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <16 x i8>, ptr [[B]], align 16
70005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
70015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
70025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
70035d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP12]], align 16
70045d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <16 x i8> [[_MSPROP]], [[_MSLD1]]
70055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <16 x i8> [[TMP3]], [[TMP4]]
70065d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
70075d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP5]]
70085d0a12d3SThurston Dang;
70095d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
70105d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.urshl.v16i8(<16 x i8> %tmp1, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
70115d0a12d3SThurston Dang  %tmp4 = load <16 x i8>, ptr %B
70125d0a12d3SThurston Dang  %tmp5 = add <16 x i8> %tmp3, %tmp4
70135d0a12d3SThurston Dang  ret <16 x i8> %tmp5
70145d0a12d3SThurston Dang}
70155d0a12d3SThurston Dang
70165d0a12d3SThurston Dangdefine <8 x i16> @ursra8h(ptr %A, ptr %B) nounwind sanitize_memory {
70175d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @ursra8h(
70185d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
70195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
70205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
70215d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
70225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7023*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
70245d0a12d3SThurston Dang; CHECK:       3:
70255d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
70265d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
70275d0a12d3SThurston Dang; CHECK:       4:
70285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
70295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
70305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
70315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
70325d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
7033*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> splat (i16 -1))
70344ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP8]], zeroinitializer
7035*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> splat (i16 -1))
70365d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7037*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
70384ce559d0SThurston Dang; CHECK:       10:
70395d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
70405d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
70414ce559d0SThurston Dang; CHECK:       11:
70425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i16>, ptr [[B]], align 16
70435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
70445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
70455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
70465d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
70475d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <8 x i16> [[_MSPROP]], [[_MSLD1]]
70485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <8 x i16> [[TMP3]], [[TMP4]]
70495d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
70505d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP5]]
70515d0a12d3SThurston Dang;
70525d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
70535d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.urshl.v8i16(<8 x i16> %tmp1, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>)
70545d0a12d3SThurston Dang  %tmp4 = load <8 x i16>, ptr %B
70555d0a12d3SThurston Dang  %tmp5 = add <8 x i16> %tmp3, %tmp4
70565d0a12d3SThurston Dang  ret <8 x i16> %tmp5
70575d0a12d3SThurston Dang}
70585d0a12d3SThurston Dang
70595d0a12d3SThurston Dangdefine <4 x i32> @ursra4s(ptr %A, ptr %B) nounwind sanitize_memory {
70605d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @ursra4s(
70615d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
70625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
70635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
70645d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
70655d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7066*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
70675d0a12d3SThurston Dang; CHECK:       3:
70685d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
70695d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
70705d0a12d3SThurston Dang; CHECK:       4:
70715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
70725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
70735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
70745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
70755d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
7076*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> splat (i32 -1))
70774ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP8]], zeroinitializer
7078*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> splat (i32 -1))
70795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7080*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
70814ce559d0SThurston Dang; CHECK:       10:
70825d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
70835d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
70844ce559d0SThurston Dang; CHECK:       11:
70855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i32>, ptr [[B]], align 16
70865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
70875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
70885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
70895d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
70905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <4 x i32> [[_MSPROP]], [[_MSLD1]]
70915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <4 x i32> [[TMP3]], [[TMP4]]
70925d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
70935d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP5]]
70945d0a12d3SThurston Dang;
70955d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
70965d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.urshl.v4i32(<4 x i32> %tmp1, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>)
70975d0a12d3SThurston Dang  %tmp4 = load <4 x i32>, ptr %B
70985d0a12d3SThurston Dang  %tmp5 = add <4 x i32> %tmp3, %tmp4
70995d0a12d3SThurston Dang  ret <4 x i32> %tmp5
71005d0a12d3SThurston Dang}
71015d0a12d3SThurston Dang
71025d0a12d3SThurston Dangdefine <2 x i64> @ursra2d(ptr %A, ptr %B) nounwind sanitize_memory {
71035d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @ursra2d(
71045d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
71055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
71065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
71075d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
71085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7109*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
71105d0a12d3SThurston Dang; CHECK:       3:
71115d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
71125d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
71135d0a12d3SThurston Dang; CHECK:       4:
71145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
71155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
71165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
71175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
71185d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
7119*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> splat (i64 -1))
71204ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP8]], zeroinitializer
7121*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> splat (i64 -1))
71225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7123*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
71244ce559d0SThurston Dang; CHECK:       10:
71255d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
71265d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
71274ce559d0SThurston Dang; CHECK:       11:
71285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i64>, ptr [[B]], align 16
71295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
71305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
71315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
71325d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
71335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <2 x i64> [[_MSPROP]], [[_MSLD1]]
71345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <2 x i64> [[TMP3]], [[TMP4]]
71355d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
71365d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP5]]
71375d0a12d3SThurston Dang;
71385d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
71395d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> %tmp1, <2 x i64> <i64 -1, i64 -1>)
71405d0a12d3SThurston Dang  %tmp4 = load <2 x i64>, ptr %B
71415d0a12d3SThurston Dang  %tmp5 = add <2 x i64> %tmp3, %tmp4
71425d0a12d3SThurston Dang  ret <2 x i64> %tmp5
71435d0a12d3SThurston Dang}
71445d0a12d3SThurston Dang
71455d0a12d3SThurston Dangdefine <1 x i64> @ursra1d(ptr %A, ptr %B) nounwind sanitize_memory {
71465d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @ursra1d(
71475d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
71485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
71495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
71505d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
71515d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7152*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
71535d0a12d3SThurston Dang; CHECK:       3:
71545d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
71555d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
71565d0a12d3SThurston Dang; CHECK:       4:
71575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
71585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
71595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
71605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
71615d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP7]], align 8
7162*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> splat (i64 -1))
71634ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP8]], zeroinitializer
7164*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> splat (i64 -1))
71655d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7166*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
71674ce559d0SThurston Dang; CHECK:       10:
71685d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
71695d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
71704ce559d0SThurston Dang; CHECK:       11:
71715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <1 x i64>, ptr [[B]], align 8
71725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
71735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
71745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
71755d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <1 x i64>, ptr [[TMP12]], align 8
71765d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <1 x i64> [[_MSPROP]], [[_MSLD1]]
71775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <1 x i64> [[TMP3]], [[TMP4]]
71785d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
71795d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP5]]
71805d0a12d3SThurston Dang;
71815d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
71825d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.urshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 -1>)
71835d0a12d3SThurston Dang  %tmp4 = load <1 x i64>, ptr %B
71845d0a12d3SThurston Dang  %tmp5 = add <1 x i64> %tmp3, %tmp4
71855d0a12d3SThurston Dang  ret <1 x i64> %tmp5
71865d0a12d3SThurston Dang}
71875d0a12d3SThurston Dang
71885d0a12d3SThurston Dangdefine i64 @ursra_scalar(ptr %A, ptr %B) nounwind sanitize_memory {
71895d0a12d3SThurston Dang; CHECK-LABEL: define i64 @ursra_scalar(
71905d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
71915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
71925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
71935d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
71945d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7195*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
71965d0a12d3SThurston Dang; CHECK:       3:
71975d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
71985d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
71995d0a12d3SThurston Dang; CHECK:       4:
72005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
72015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
72025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
72035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
72045d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP7]], align 8
72054ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = call i64 @llvm.aarch64.neon.urshl.i64(i64 [[_MSLD]], i64 -1)
72064ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP8]], 0
72075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.urshl.i64(i64 [[TMP1]], i64 -1)
72085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7209*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
72104ce559d0SThurston Dang; CHECK:       10:
72115d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
72125d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
72134ce559d0SThurston Dang; CHECK:       11:
72145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load i64, ptr [[B]], align 8
72155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
72165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
72175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
72185d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load i64, ptr [[TMP12]], align 8
72195d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or i64 [[_MSPROP]], [[_MSLD1]]
72205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add i64 [[TMP3]], [[TMP4]]
72215d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP2]], ptr @__msan_retval_tls, align 8
72225d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP5]]
72235d0a12d3SThurston Dang;
72245d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
72255d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.urshl.i64(i64 %tmp1, i64 -1)
72265d0a12d3SThurston Dang  %tmp4 = load i64, ptr %B
72275d0a12d3SThurston Dang  %tmp5 = add i64 %tmp3, %tmp4
72285d0a12d3SThurston Dang  ret i64 %tmp5
72295d0a12d3SThurston Dang}
72305d0a12d3SThurston Dang
72315d0a12d3SThurston Dangdefine <8 x i8> @srsra8b(ptr %A, ptr %B) nounwind sanitize_memory {
72325d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @srsra8b(
72335d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
72345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
72355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
72365d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
72375d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7238*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
72395d0a12d3SThurston Dang; CHECK:       3:
72405d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
72415d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
72425d0a12d3SThurston Dang; CHECK:       4:
72435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
72445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
72455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
72465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
72475d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
7248*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <8 x i8> @llvm.aarch64.neon.srshl.v8i8(<8 x i8> [[_MSLD]], <8 x i8> splat (i8 -1))
72494ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP8]], zeroinitializer
7250*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.srshl.v8i8(<8 x i8> [[TMP1]], <8 x i8> splat (i8 -1))
72515d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7252*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
72534ce559d0SThurston Dang; CHECK:       10:
72545d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
72555d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
72564ce559d0SThurston Dang; CHECK:       11:
72575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i8>, ptr [[B]], align 8
72585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
72595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
72605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
72615d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP12]], align 8
72625d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <8 x i8> [[_MSPROP]], [[_MSLD1]]
72635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <8 x i8> [[TMP3]], [[TMP4]]
72645d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
72655d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP5]]
72665d0a12d3SThurston Dang;
72675d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
72685d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.srshl.v8i8(<8 x i8> %tmp1, <8 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
72695d0a12d3SThurston Dang  %tmp4 = load <8 x i8>, ptr %B
72705d0a12d3SThurston Dang  %tmp5 = add <8 x i8> %tmp3, %tmp4
72715d0a12d3SThurston Dang  ret <8 x i8> %tmp5
72725d0a12d3SThurston Dang}
72735d0a12d3SThurston Dang
72745d0a12d3SThurston Dangdefine <4 x i16> @srsra4h(ptr %A, ptr %B) nounwind sanitize_memory {
72755d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @srsra4h(
72765d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
72775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
72785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
72795d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
72805d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7281*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
72825d0a12d3SThurston Dang; CHECK:       3:
72835d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
72845d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
72855d0a12d3SThurston Dang; CHECK:       4:
72865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
72875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
72885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
72895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
72905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
7291*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16> [[_MSLD]], <4 x i16> splat (i16 -1))
72924ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP8]], zeroinitializer
7293*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16> [[TMP1]], <4 x i16> splat (i16 -1))
72945d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7295*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
72964ce559d0SThurston Dang; CHECK:       10:
72975d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
72985d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
72994ce559d0SThurston Dang; CHECK:       11:
73005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i16>, ptr [[B]], align 8
73015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
73025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
73035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
73045d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP12]], align 8
73055d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <4 x i16> [[_MSPROP]], [[_MSLD1]]
73065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <4 x i16> [[TMP3]], [[TMP4]]
73075d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
73085d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP5]]
73095d0a12d3SThurston Dang;
73105d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
73115d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.srshl.v4i16(<4 x i16> %tmp1, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>)
73125d0a12d3SThurston Dang  %tmp4 = load <4 x i16>, ptr %B
73135d0a12d3SThurston Dang  %tmp5 = add <4 x i16> %tmp3, %tmp4
73145d0a12d3SThurston Dang  ret <4 x i16> %tmp5
73155d0a12d3SThurston Dang}
73165d0a12d3SThurston Dang
73175d0a12d3SThurston Dangdefine <2 x i32> @srsra2s(ptr %A, ptr %B) nounwind sanitize_memory {
73185d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @srsra2s(
73195d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
73205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
73215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
73225d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
73235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7324*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
73255d0a12d3SThurston Dang; CHECK:       3:
73265d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
73275d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
73285d0a12d3SThurston Dang; CHECK:       4:
73295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
73305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
73315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
73325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
73335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
7334*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> [[_MSLD]], <2 x i32> splat (i32 -1))
73354ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP8]], zeroinitializer
7336*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> [[TMP1]], <2 x i32> splat (i32 -1))
73375d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7338*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
73394ce559d0SThurston Dang; CHECK:       10:
73405d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
73415d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
73424ce559d0SThurston Dang; CHECK:       11:
73435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i32>, ptr [[B]], align 8
73445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
73455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
73465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
73475d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP12]], align 8
73485d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <2 x i32> [[_MSPROP]], [[_MSLD1]]
73495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <2 x i32> [[TMP3]], [[TMP4]]
73505d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
73515d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP5]]
73525d0a12d3SThurston Dang;
73535d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
73545d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.srshl.v2i32(<2 x i32> %tmp1, <2 x i32> <i32 -1, i32 -1>)
73555d0a12d3SThurston Dang  %tmp4 = load <2 x i32>, ptr %B
73565d0a12d3SThurston Dang  %tmp5 = add <2 x i32> %tmp3, %tmp4
73575d0a12d3SThurston Dang  ret <2 x i32> %tmp5
73585d0a12d3SThurston Dang}
73595d0a12d3SThurston Dang
73605d0a12d3SThurston Dangdefine <16 x i8> @srsra16b(ptr %A, ptr %B) nounwind sanitize_memory {
73615d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @srsra16b(
73625d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
73635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
73645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
73655d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
73665d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7367*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
73685d0a12d3SThurston Dang; CHECK:       3:
73695d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
73705d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
73715d0a12d3SThurston Dang; CHECK:       4:
73725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
73735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
73745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
73755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
73765d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
7377*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> [[_MSLD]], <16 x i8> splat (i8 -1))
73784ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP8]], zeroinitializer
7379*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> [[TMP1]], <16 x i8> splat (i8 -1))
73805d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7381*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
73824ce559d0SThurston Dang; CHECK:       10:
73835d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
73845d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
73854ce559d0SThurston Dang; CHECK:       11:
73865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <16 x i8>, ptr [[B]], align 16
73875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
73885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
73895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
73905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP12]], align 16
73915d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <16 x i8> [[_MSPROP]], [[_MSLD1]]
73925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <16 x i8> [[TMP3]], [[TMP4]]
73935d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
73945d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP5]]
73955d0a12d3SThurston Dang;
73965d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
73975d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.srshl.v16i8(<16 x i8> %tmp1, <16 x i8> <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)
73985d0a12d3SThurston Dang  %tmp4 = load <16 x i8>, ptr %B
73995d0a12d3SThurston Dang  %tmp5 = add <16 x i8> %tmp3, %tmp4
74005d0a12d3SThurston Dang  ret <16 x i8> %tmp5
74015d0a12d3SThurston Dang}
74025d0a12d3SThurston Dang
74035d0a12d3SThurston Dangdefine <8 x i16> @srsra8h(ptr %A, ptr %B) nounwind sanitize_memory {
74045d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @srsra8h(
74055d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
74065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
74075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
74085d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
74095d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7410*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
74115d0a12d3SThurston Dang; CHECK:       3:
74125d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
74135d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
74145d0a12d3SThurston Dang; CHECK:       4:
74155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
74165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
74175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
74185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
74195d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
7420*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16> [[_MSLD]], <8 x i16> splat (i16 -1))
74214ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP8]], zeroinitializer
7422*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16> [[TMP1]], <8 x i16> splat (i16 -1))
74235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7424*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
74254ce559d0SThurston Dang; CHECK:       10:
74265d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
74275d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
74284ce559d0SThurston Dang; CHECK:       11:
74295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i16>, ptr [[B]], align 16
74305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
74315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
74325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
74335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
74345d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <8 x i16> [[_MSPROP]], [[_MSLD1]]
74355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <8 x i16> [[TMP3]], [[TMP4]]
74365d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
74375d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP5]]
74385d0a12d3SThurston Dang;
74395d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
74405d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.srshl.v8i16(<8 x i16> %tmp1, <8 x i16> <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>)
74415d0a12d3SThurston Dang  %tmp4 = load <8 x i16>, ptr %B
74425d0a12d3SThurston Dang  %tmp5 = add <8 x i16> %tmp3, %tmp4
74435d0a12d3SThurston Dang  ret <8 x i16> %tmp5
74445d0a12d3SThurston Dang}
74455d0a12d3SThurston Dang
74465d0a12d3SThurston Dangdefine <4 x i32> @srsra4s(ptr %A, ptr %B) nounwind sanitize_memory {
74475d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @srsra4s(
74485d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
74495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
74505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
74515d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
74525d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7453*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
74545d0a12d3SThurston Dang; CHECK:       3:
74555d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
74565d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
74575d0a12d3SThurston Dang; CHECK:       4:
74585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
74595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
74605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
74615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
74625d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
7463*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32> [[_MSLD]], <4 x i32> splat (i32 -1))
74644ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP8]], zeroinitializer
7465*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32> [[TMP1]], <4 x i32> splat (i32 -1))
74665d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7467*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
74684ce559d0SThurston Dang; CHECK:       10:
74695d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
74705d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
74714ce559d0SThurston Dang; CHECK:       11:
74725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i32>, ptr [[B]], align 16
74735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
74745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
74755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
74765d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
74775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <4 x i32> [[_MSPROP]], [[_MSLD1]]
74785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <4 x i32> [[TMP3]], [[TMP4]]
74795d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
74805d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP5]]
74815d0a12d3SThurston Dang;
74825d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
74835d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.srshl.v4i32(<4 x i32> %tmp1, <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>)
74845d0a12d3SThurston Dang  %tmp4 = load <4 x i32>, ptr %B
74855d0a12d3SThurston Dang  %tmp5 = add <4 x i32> %tmp3, %tmp4
74865d0a12d3SThurston Dang  ret <4 x i32> %tmp5
74875d0a12d3SThurston Dang}
74885d0a12d3SThurston Dang
74895d0a12d3SThurston Dangdefine <2 x i64> @srsra2d(ptr %A, ptr %B) nounwind sanitize_memory {
74905d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @srsra2d(
74915d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
74925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
74935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
74945d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
74955d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7496*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
74975d0a12d3SThurston Dang; CHECK:       3:
74985d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
74995d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
75005d0a12d3SThurston Dang; CHECK:       4:
75015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
75025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
75035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
75045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
75055d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
7506*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> [[_MSLD]], <2 x i64> splat (i64 -1))
75074ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP8]], zeroinitializer
7508*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> [[TMP1]], <2 x i64> splat (i64 -1))
75095d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7510*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
75114ce559d0SThurston Dang; CHECK:       10:
75125d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
75135d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
75144ce559d0SThurston Dang; CHECK:       11:
75155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i64>, ptr [[B]], align 16
75165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
75175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
75185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
75195d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
75205d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <2 x i64> [[_MSPROP]], [[_MSLD1]]
75215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <2 x i64> [[TMP3]], [[TMP4]]
75225d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
75235d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP5]]
75245d0a12d3SThurston Dang;
75255d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
75265d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> %tmp1, <2 x i64> <i64 -1, i64 -1>)
75275d0a12d3SThurston Dang  %tmp4 = load <2 x i64>, ptr %B
75285d0a12d3SThurston Dang  %tmp5 = add <2 x i64> %tmp3, %tmp4
75295d0a12d3SThurston Dang  ret <2 x i64> %tmp5
75305d0a12d3SThurston Dang}
75315d0a12d3SThurston Dang
75325d0a12d3SThurston Dangdefine <1 x i64> @srsra1d(ptr %A, ptr %B) nounwind sanitize_memory {
75335d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @srsra1d(
75345d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
75355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
75365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
75375d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
75385d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7539*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
75405d0a12d3SThurston Dang; CHECK:       3:
75415d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
75425d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
75435d0a12d3SThurston Dang; CHECK:       4:
75445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
75455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
75465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
75475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
75485d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP7]], align 8
7549*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> [[_MSLD]], <1 x i64> splat (i64 -1))
75504ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP8]], zeroinitializer
7551*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> [[TMP1]], <1 x i64> splat (i64 -1))
75525d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7553*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
75544ce559d0SThurston Dang; CHECK:       10:
75555d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
75565d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
75574ce559d0SThurston Dang; CHECK:       11:
75585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <1 x i64>, ptr [[B]], align 8
75595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
75605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
75615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
75625d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <1 x i64>, ptr [[TMP12]], align 8
75635d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or <1 x i64> [[_MSPROP]], [[_MSLD1]]
75645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <1 x i64> [[TMP3]], [[TMP4]]
75655d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP2]], ptr @__msan_retval_tls, align 8
75665d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP5]]
75675d0a12d3SThurston Dang;
75685d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
75695d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.srshl.v1i64(<1 x i64> %tmp1, <1 x i64> <i64 -1>)
75705d0a12d3SThurston Dang  %tmp4 = load <1 x i64>, ptr %B
75715d0a12d3SThurston Dang  %tmp5 = add <1 x i64> %tmp3, %tmp4
75725d0a12d3SThurston Dang  ret <1 x i64> %tmp5
75735d0a12d3SThurston Dang}
75745d0a12d3SThurston Dang
75755d0a12d3SThurston Dangdefine i64 @srsra_scalar(ptr %A, ptr %B) nounwind sanitize_memory {
75765d0a12d3SThurston Dang; CHECK-LABEL: define i64 @srsra_scalar(
75775d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
75785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
75795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
75805d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
75815d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7582*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
75835d0a12d3SThurston Dang; CHECK:       3:
75845d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
75855d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
75865d0a12d3SThurston Dang; CHECK:       4:
75875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr [[A]], align 8
75885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
75895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
75905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
75915d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP7]], align 8
75924ce559d0SThurston Dang; CHECK-NEXT:    [[TMP8:%.*]] = call i64 @llvm.aarch64.neon.srshl.i64(i64 [[_MSLD]], i64 -1)
75934ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP8]], 0
75945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call i64 @llvm.aarch64.neon.srshl.i64(i64 [[TMP1]], i64 -1)
75955d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP2]], 0
7596*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP3]], label [[TMP13:%.*]], label [[TMP14:%.*]], !prof [[PROF1]]
75974ce559d0SThurston Dang; CHECK:       10:
75985d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
75995d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
76004ce559d0SThurston Dang; CHECK:       11:
76015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load i64, ptr [[B]], align 8
76025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
76035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
76045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
76055d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load i64, ptr [[TMP12]], align 8
76065d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP2:%.*]] = or i64 [[_MSPROP]], [[_MSLD1]]
76075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add i64 [[TMP3]], [[TMP4]]
76085d0a12d3SThurston Dang; CHECK-NEXT:    store i64 [[_MSPROP2]], ptr @__msan_retval_tls, align 8
76095d0a12d3SThurston Dang; CHECK-NEXT:    ret i64 [[TMP5]]
76105d0a12d3SThurston Dang;
76115d0a12d3SThurston Dang  %tmp1 = load i64, ptr %A
76125d0a12d3SThurston Dang  %tmp3 = call i64 @llvm.aarch64.neon.srshl.i64(i64 %tmp1, i64 -1)
76135d0a12d3SThurston Dang  %tmp4 = load i64, ptr %B
76145d0a12d3SThurston Dang  %tmp5 = add i64 %tmp3, %tmp4
76155d0a12d3SThurston Dang  ret i64 %tmp5
76165d0a12d3SThurston Dang}
76175d0a12d3SThurston Dang
76185d0a12d3SThurston Dangdefine <8 x i8> @usra8b(ptr %A, ptr %B) nounwind sanitize_memory {
76195d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @usra8b(
76205d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
76215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
76225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
76235d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
76245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7625*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
76265d0a12d3SThurston Dang; CHECK:       3:
76275d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
76285d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
76295d0a12d3SThurston Dang; CHECK:       4:
76305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
76315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
76325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
76335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
76345d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
7635*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = lshr <8 x i8> [[_MSLD]], splat (i8 1)
76365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <8 x i8> [[TMP8]], zeroinitializer
7637*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <8 x i8> [[TMP1]], splat (i8 1)
76385d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
7639*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
76405d0a12d3SThurston Dang; CHECK:       10:
76415d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
76425d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
76435d0a12d3SThurston Dang; CHECK:       11:
76445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i8>, ptr [[B]], align 8
76455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
76465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
76475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
76485d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP14]], align 8
76495d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP9]], [[_MSLD1]]
76505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <8 x i8> [[TMP3]], [[TMP4]]
76515d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
76525d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP5]]
76535d0a12d3SThurston Dang;
76545d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
76555d0a12d3SThurston Dang  %tmp3 = lshr <8 x i8> %tmp1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
76565d0a12d3SThurston Dang  %tmp4 = load <8 x i8>, ptr %B
76575d0a12d3SThurston Dang  %tmp5 = add <8 x i8> %tmp3, %tmp4
76585d0a12d3SThurston Dang  ret <8 x i8> %tmp5
76595d0a12d3SThurston Dang}
76605d0a12d3SThurston Dang
76615d0a12d3SThurston Dangdefine <4 x i16> @usra4h(ptr %A, ptr %B) nounwind sanitize_memory {
76625d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @usra4h(
76635d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
76645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
76655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
76665d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
76675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7668*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
76695d0a12d3SThurston Dang; CHECK:       3:
76705d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
76715d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
76725d0a12d3SThurston Dang; CHECK:       4:
76735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
76745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
76755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
76765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
76775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
7678*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = lshr <4 x i16> [[_MSLD]], splat (i16 1)
76795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <4 x i16> [[TMP8]], zeroinitializer
7680*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <4 x i16> [[TMP1]], splat (i16 1)
76815d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
7682*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
76835d0a12d3SThurston Dang; CHECK:       10:
76845d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
76855d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
76865d0a12d3SThurston Dang; CHECK:       11:
76875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i16>, ptr [[B]], align 8
76885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
76895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
76905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
76915d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP14]], align 8
76925d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP9]], [[_MSLD1]]
76935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <4 x i16> [[TMP3]], [[TMP4]]
76945d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
76955d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP5]]
76965d0a12d3SThurston Dang;
76975d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
76985d0a12d3SThurston Dang  %tmp3 = lshr <4 x i16> %tmp1, <i16 1, i16 1, i16 1, i16 1>
76995d0a12d3SThurston Dang  %tmp4 = load <4 x i16>, ptr %B
77005d0a12d3SThurston Dang  %tmp5 = add <4 x i16> %tmp3, %tmp4
77015d0a12d3SThurston Dang  ret <4 x i16> %tmp5
77025d0a12d3SThurston Dang}
77035d0a12d3SThurston Dang
77045d0a12d3SThurston Dangdefine <2 x i32> @usra2s(ptr %A, ptr %B) nounwind sanitize_memory {
77055d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @usra2s(
77065d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
77075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
77085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
77095d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
77105d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7711*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
77125d0a12d3SThurston Dang; CHECK:       3:
77135d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
77145d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
77155d0a12d3SThurston Dang; CHECK:       4:
77165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
77175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
77185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
77195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
77205d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
7721*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = lshr <2 x i32> [[_MSLD]], splat (i32 1)
77225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <2 x i32> [[TMP8]], zeroinitializer
7723*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <2 x i32> [[TMP1]], splat (i32 1)
77245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
7725*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
77265d0a12d3SThurston Dang; CHECK:       10:
77275d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
77285d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
77295d0a12d3SThurston Dang; CHECK:       11:
77305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i32>, ptr [[B]], align 8
77315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
77325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
77335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
77345d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP14]], align 8
77355d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP9]], [[_MSLD1]]
77365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <2 x i32> [[TMP3]], [[TMP4]]
77375d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
77385d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP5]]
77395d0a12d3SThurston Dang;
77405d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
77415d0a12d3SThurston Dang  %tmp3 = lshr <2 x i32> %tmp1, <i32 1, i32 1>
77425d0a12d3SThurston Dang  %tmp4 = load <2 x i32>, ptr %B
77435d0a12d3SThurston Dang  %tmp5 = add <2 x i32> %tmp3, %tmp4
77445d0a12d3SThurston Dang  ret <2 x i32> %tmp5
77455d0a12d3SThurston Dang}
77465d0a12d3SThurston Dang
77475d0a12d3SThurston Dangdefine <16 x i8> @usra16b(ptr %A, ptr %B) nounwind sanitize_memory {
77485d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @usra16b(
77495d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
77505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
77515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
77525d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
77535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7754*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
77555d0a12d3SThurston Dang; CHECK:       3:
77565d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
77575d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
77585d0a12d3SThurston Dang; CHECK:       4:
77595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
77605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
77615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
77625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
77635d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
7764*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = lshr <16 x i8> [[_MSLD]], splat (i8 1)
77655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <16 x i8> [[TMP8]], zeroinitializer
7766*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <16 x i8> [[TMP1]], splat (i8 1)
77675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
7768*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
77695d0a12d3SThurston Dang; CHECK:       10:
77705d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
77715d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
77725d0a12d3SThurston Dang; CHECK:       11:
77735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <16 x i8>, ptr [[B]], align 16
77745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
77755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
77765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
77775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP14]], align 16
77785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP9]], [[_MSLD1]]
77795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <16 x i8> [[TMP3]], [[TMP4]]
77805d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
77815d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP5]]
77825d0a12d3SThurston Dang;
77835d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
77845d0a12d3SThurston Dang  %tmp3 = lshr <16 x i8> %tmp1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
77855d0a12d3SThurston Dang  %tmp4 = load <16 x i8>, ptr %B
77865d0a12d3SThurston Dang  %tmp5 = add <16 x i8> %tmp3, %tmp4
77875d0a12d3SThurston Dang  ret <16 x i8> %tmp5
77885d0a12d3SThurston Dang}
77895d0a12d3SThurston Dang
77905d0a12d3SThurston Dangdefine <8 x i16> @usra8h(ptr %A, ptr %B) nounwind sanitize_memory {
77915d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @usra8h(
77925d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
77935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
77945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
77955d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
77965d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7797*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
77985d0a12d3SThurston Dang; CHECK:       3:
77995d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
78005d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
78015d0a12d3SThurston Dang; CHECK:       4:
78025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
78035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
78045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
78055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
78065d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
7807*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = lshr <8 x i16> [[_MSLD]], splat (i16 1)
78085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <8 x i16> [[TMP8]], zeroinitializer
7809*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <8 x i16> [[TMP1]], splat (i16 1)
78105d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
7811*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
78125d0a12d3SThurston Dang; CHECK:       10:
78135d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
78145d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
78155d0a12d3SThurston Dang; CHECK:       11:
78165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i16>, ptr [[B]], align 16
78175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
78185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
78195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
78205d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP14]], align 16
78215d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP9]], [[_MSLD1]]
78225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <8 x i16> [[TMP3]], [[TMP4]]
78235d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
78245d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP5]]
78255d0a12d3SThurston Dang;
78265d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
78275d0a12d3SThurston Dang  %tmp3 = lshr <8 x i16> %tmp1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
78285d0a12d3SThurston Dang  %tmp4 = load <8 x i16>, ptr %B
78295d0a12d3SThurston Dang  %tmp5 = add <8 x i16> %tmp3, %tmp4
78305d0a12d3SThurston Dang  ret <8 x i16> %tmp5
78315d0a12d3SThurston Dang}
78325d0a12d3SThurston Dang
78335d0a12d3SThurston Dangdefine <4 x i32> @usra4s(ptr %A, ptr %B) nounwind sanitize_memory {
78345d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @usra4s(
78355d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
78365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
78375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
78385d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
78395d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7840*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
78415d0a12d3SThurston Dang; CHECK:       3:
78425d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
78435d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
78445d0a12d3SThurston Dang; CHECK:       4:
78455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
78465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
78475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
78485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
78495d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
7850*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = lshr <4 x i32> [[_MSLD]], splat (i32 1)
78515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <4 x i32> [[TMP8]], zeroinitializer
7852*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <4 x i32> [[TMP1]], splat (i32 1)
78535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
7854*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
78555d0a12d3SThurston Dang; CHECK:       10:
78565d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
78575d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
78585d0a12d3SThurston Dang; CHECK:       11:
78595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i32>, ptr [[B]], align 16
78605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
78615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
78625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
78635d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP14]], align 16
78645d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP9]], [[_MSLD1]]
78655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <4 x i32> [[TMP3]], [[TMP4]]
78665d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
78675d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP5]]
78685d0a12d3SThurston Dang;
78695d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
78705d0a12d3SThurston Dang  %tmp3 = lshr <4 x i32> %tmp1, <i32 1, i32 1, i32 1, i32 1>
78715d0a12d3SThurston Dang  %tmp4 = load <4 x i32>, ptr %B
78725d0a12d3SThurston Dang  %tmp5 = add <4 x i32> %tmp3, %tmp4
78735d0a12d3SThurston Dang  ret <4 x i32> %tmp5
78745d0a12d3SThurston Dang}
78755d0a12d3SThurston Dang
78765d0a12d3SThurston Dangdefine <2 x i64> @usra2d(ptr %A, ptr %B) nounwind sanitize_memory {
78775d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @usra2d(
78785d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
78795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
78805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
78815d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
78825d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7883*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
78845d0a12d3SThurston Dang; CHECK:       3:
78855d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
78865d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
78875d0a12d3SThurston Dang; CHECK:       4:
78885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
78895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
78905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
78915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
78925d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
7893*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = lshr <2 x i64> [[_MSLD]], splat (i64 1)
78945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <2 x i64> [[TMP8]], zeroinitializer
7895*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <2 x i64> [[TMP1]], splat (i64 1)
78965d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
7897*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
78985d0a12d3SThurston Dang; CHECK:       10:
78995d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
79005d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
79015d0a12d3SThurston Dang; CHECK:       11:
79025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i64>, ptr [[B]], align 16
79035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
79045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
79055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
79065d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP14]], align 16
79075d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP9]], [[_MSLD1]]
79085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <2 x i64> [[TMP3]], [[TMP4]]
79095d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
79105d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP5]]
79115d0a12d3SThurston Dang;
79125d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
79135d0a12d3SThurston Dang  %tmp3 = lshr <2 x i64> %tmp1, <i64 1, i64 1>
79145d0a12d3SThurston Dang  %tmp4 = load <2 x i64>, ptr %B
79155d0a12d3SThurston Dang  %tmp5 = add <2 x i64> %tmp3, %tmp4
79165d0a12d3SThurston Dang  ret <2 x i64> %tmp5
79175d0a12d3SThurston Dang}
79185d0a12d3SThurston Dang
79195d0a12d3SThurston Dangdefine <1 x i64> @usra1d(ptr %A, ptr %B) nounwind sanitize_memory {
79205d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @usra1d(
79215d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
79225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
79235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
79245d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
79255d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7926*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
79275d0a12d3SThurston Dang; CHECK:       3:
79285d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
79295d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
79305d0a12d3SThurston Dang; CHECK:       4:
79315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
79325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
79335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
79345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
79355d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP7]], align 8
7936*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = lshr <1 x i64> [[_MSLD]], splat (i64 1)
79375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <1 x i64> [[TMP8]], zeroinitializer
7938*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <1 x i64> [[TMP1]], splat (i64 1)
79395d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
7940*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
79415d0a12d3SThurston Dang; CHECK:       10:
79425d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
79435d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
79445d0a12d3SThurston Dang; CHECK:       11:
79455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <1 x i64>, ptr [[B]], align 8
79465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
79475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
79485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
79495d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <1 x i64>, ptr [[TMP14]], align 8
79505d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <1 x i64> [[TMP9]], [[_MSLD1]]
79515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <1 x i64> [[TMP3]], [[TMP4]]
79525d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
79535d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP5]]
79545d0a12d3SThurston Dang;
79555d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
79565d0a12d3SThurston Dang  %tmp3 = lshr <1 x i64> %tmp1, <i64 1>
79575d0a12d3SThurston Dang  %tmp4 = load <1 x i64>, ptr %B
79585d0a12d3SThurston Dang  %tmp5 = add <1 x i64> %tmp3, %tmp4
79595d0a12d3SThurston Dang  ret <1 x i64> %tmp5
79605d0a12d3SThurston Dang}
79615d0a12d3SThurston Dang
79625d0a12d3SThurston Dangdefine <8 x i8> @ssra8b(ptr %A, ptr %B) nounwind sanitize_memory {
79635d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @ssra8b(
79645d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
79655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
79665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
79675d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
79685d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
7969*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
79705d0a12d3SThurston Dang; CHECK:       3:
79715d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
79725d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
79735d0a12d3SThurston Dang; CHECK:       4:
79745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
79755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
79765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
79775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
79785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
7979*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = ashr <8 x i8> [[_MSLD]], splat (i8 1)
79805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <8 x i8> [[TMP8]], zeroinitializer
7981*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = ashr <8 x i8> [[TMP1]], splat (i8 1)
79825d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
7983*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
79845d0a12d3SThurston Dang; CHECK:       10:
79855d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
79865d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
79875d0a12d3SThurston Dang; CHECK:       11:
79885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i8>, ptr [[B]], align 8
79895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
79905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
79915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
79925d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP14]], align 8
79935d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i8> [[TMP9]], [[_MSLD1]]
79945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <8 x i8> [[TMP3]], [[TMP4]]
79955d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
79965d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP5]]
79975d0a12d3SThurston Dang;
79985d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
79995d0a12d3SThurston Dang  %tmp3 = ashr <8 x i8> %tmp1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
80005d0a12d3SThurston Dang  %tmp4 = load <8 x i8>, ptr %B
80015d0a12d3SThurston Dang  %tmp5 = add <8 x i8> %tmp3, %tmp4
80025d0a12d3SThurston Dang  ret <8 x i8> %tmp5
80035d0a12d3SThurston Dang}
80045d0a12d3SThurston Dang
80055d0a12d3SThurston Dangdefine <4 x i16> @ssra4h(ptr %A, ptr %B) nounwind sanitize_memory {
80065d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @ssra4h(
80075d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
80085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
80095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
80105d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
80115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8012*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
80135d0a12d3SThurston Dang; CHECK:       3:
80145d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
80155d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
80165d0a12d3SThurston Dang; CHECK:       4:
80175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
80185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
80195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
80205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
80215d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
8022*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = ashr <4 x i16> [[_MSLD]], splat (i16 1)
80235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <4 x i16> [[TMP8]], zeroinitializer
8024*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = ashr <4 x i16> [[TMP1]], splat (i16 1)
80255d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8026*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
80275d0a12d3SThurston Dang; CHECK:       10:
80285d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
80295d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
80305d0a12d3SThurston Dang; CHECK:       11:
80315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i16>, ptr [[B]], align 8
80325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
80335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
80345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
80355d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP14]], align 8
80365d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i16> [[TMP9]], [[_MSLD1]]
80375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <4 x i16> [[TMP3]], [[TMP4]]
80385d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
80395d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP5]]
80405d0a12d3SThurston Dang;
80415d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
80425d0a12d3SThurston Dang  %tmp3 = ashr <4 x i16> %tmp1, <i16 1, i16 1, i16 1, i16 1>
80435d0a12d3SThurston Dang  %tmp4 = load <4 x i16>, ptr %B
80445d0a12d3SThurston Dang  %tmp5 = add <4 x i16> %tmp3, %tmp4
80455d0a12d3SThurston Dang  ret <4 x i16> %tmp5
80465d0a12d3SThurston Dang}
80475d0a12d3SThurston Dang
80485d0a12d3SThurston Dangdefine <2 x i32> @ssra2s(ptr %A, ptr %B) nounwind sanitize_memory {
80495d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @ssra2s(
80505d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
80515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
80525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
80535d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
80545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8055*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
80565d0a12d3SThurston Dang; CHECK:       3:
80575d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
80585d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
80595d0a12d3SThurston Dang; CHECK:       4:
80605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
80615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
80625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
80635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
80645d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
8065*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = ashr <2 x i32> [[_MSLD]], splat (i32 1)
80665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <2 x i32> [[TMP8]], zeroinitializer
8067*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = ashr <2 x i32> [[TMP1]], splat (i32 1)
80685d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8069*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
80705d0a12d3SThurston Dang; CHECK:       10:
80715d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
80725d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
80735d0a12d3SThurston Dang; CHECK:       11:
80745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i32>, ptr [[B]], align 8
80755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
80765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
80775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
80785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP14]], align 8
80795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i32> [[TMP9]], [[_MSLD1]]
80805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <2 x i32> [[TMP3]], [[TMP4]]
80815d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
80825d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP5]]
80835d0a12d3SThurston Dang;
80845d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
80855d0a12d3SThurston Dang  %tmp3 = ashr <2 x i32> %tmp1, <i32 1, i32 1>
80865d0a12d3SThurston Dang  %tmp4 = load <2 x i32>, ptr %B
80875d0a12d3SThurston Dang  %tmp5 = add <2 x i32> %tmp3, %tmp4
80885d0a12d3SThurston Dang  ret <2 x i32> %tmp5
80895d0a12d3SThurston Dang}
80905d0a12d3SThurston Dang
80915d0a12d3SThurston Dangdefine <16 x i8> @ssra16b(ptr %A, ptr %B) nounwind sanitize_memory {
80925d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @ssra16b(
80935d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
80945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
80955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
80965d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
80975d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8098*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
80995d0a12d3SThurston Dang; CHECK:       3:
81005d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
81015d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
81025d0a12d3SThurston Dang; CHECK:       4:
81035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
81045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
81055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
81065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
81075d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
8108*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = ashr <16 x i8> [[_MSLD]], splat (i8 1)
81095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <16 x i8> [[TMP8]], zeroinitializer
8110*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = ashr <16 x i8> [[TMP1]], splat (i8 1)
81115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8112*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
81135d0a12d3SThurston Dang; CHECK:       10:
81145d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
81155d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
81165d0a12d3SThurston Dang; CHECK:       11:
81175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <16 x i8>, ptr [[B]], align 16
81185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
81195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
81205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
81215d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP14]], align 16
81225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <16 x i8> [[TMP9]], [[_MSLD1]]
81235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <16 x i8> [[TMP3]], [[TMP4]]
81245d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 8
81255d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP5]]
81265d0a12d3SThurston Dang;
81275d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
81285d0a12d3SThurston Dang  %tmp3 = ashr <16 x i8> %tmp1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
81295d0a12d3SThurston Dang  %tmp4 = load <16 x i8>, ptr %B
81305d0a12d3SThurston Dang  %tmp5 = add <16 x i8> %tmp3, %tmp4
81315d0a12d3SThurston Dang  ret <16 x i8> %tmp5
81325d0a12d3SThurston Dang}
81335d0a12d3SThurston Dang
81345d0a12d3SThurston Dangdefine <8 x i16> @ssra8h(ptr %A, ptr %B) nounwind sanitize_memory {
81355d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @ssra8h(
81365d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
81375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
81385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
81395d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
81405d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8141*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
81425d0a12d3SThurston Dang; CHECK:       3:
81435d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
81445d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
81455d0a12d3SThurston Dang; CHECK:       4:
81465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
81475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
81485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
81495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
81505d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
8151*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = ashr <8 x i16> [[_MSLD]], splat (i16 1)
81525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <8 x i16> [[TMP8]], zeroinitializer
8153*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = ashr <8 x i16> [[TMP1]], splat (i16 1)
81545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8155*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
81565d0a12d3SThurston Dang; CHECK:       10:
81575d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
81585d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
81595d0a12d3SThurston Dang; CHECK:       11:
81605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i16>, ptr [[B]], align 16
81615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
81625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
81635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
81645d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP14]], align 16
81655d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <8 x i16> [[TMP9]], [[_MSLD1]]
81665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <8 x i16> [[TMP3]], [[TMP4]]
81675d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 8
81685d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP5]]
81695d0a12d3SThurston Dang;
81705d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
81715d0a12d3SThurston Dang  %tmp3 = ashr <8 x i16> %tmp1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
81725d0a12d3SThurston Dang  %tmp4 = load <8 x i16>, ptr %B
81735d0a12d3SThurston Dang  %tmp5 = add <8 x i16> %tmp3, %tmp4
81745d0a12d3SThurston Dang  ret <8 x i16> %tmp5
81755d0a12d3SThurston Dang}
81765d0a12d3SThurston Dang
81775d0a12d3SThurston Dangdefine <4 x i32> @ssra4s(ptr %A, ptr %B) nounwind sanitize_memory {
81785d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @ssra4s(
81795d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
81805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
81815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
81825d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
81835d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8184*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
81855d0a12d3SThurston Dang; CHECK:       3:
81865d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
81875d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
81885d0a12d3SThurston Dang; CHECK:       4:
81895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
81905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
81915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
81925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
81935d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
8194*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = ashr <4 x i32> [[_MSLD]], splat (i32 1)
81955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <4 x i32> [[TMP8]], zeroinitializer
8196*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = ashr <4 x i32> [[TMP1]], splat (i32 1)
81975d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8198*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
81995d0a12d3SThurston Dang; CHECK:       10:
82005d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
82015d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
82025d0a12d3SThurston Dang; CHECK:       11:
82035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i32>, ptr [[B]], align 16
82045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
82055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
82065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
82075d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP14]], align 16
82085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP9]], [[_MSLD1]]
82095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <4 x i32> [[TMP3]], [[TMP4]]
82105d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
82115d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP5]]
82125d0a12d3SThurston Dang;
82135d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
82145d0a12d3SThurston Dang  %tmp3 = ashr <4 x i32> %tmp1, <i32 1, i32 1, i32 1, i32 1>
82155d0a12d3SThurston Dang  %tmp4 = load <4 x i32>, ptr %B
82165d0a12d3SThurston Dang  %tmp5 = add <4 x i32> %tmp3, %tmp4
82175d0a12d3SThurston Dang  ret <4 x i32> %tmp5
82185d0a12d3SThurston Dang}
82195d0a12d3SThurston Dang
82205d0a12d3SThurston Dangdefine <2 x i64> @ssra2d(ptr %A, ptr %B) nounwind sanitize_memory {
82215d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @ssra2d(
82225d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
82235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
82245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
82255d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
82265d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8227*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
82285d0a12d3SThurston Dang; CHECK:       3:
82295d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
82305d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
82315d0a12d3SThurston Dang; CHECK:       4:
82325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
82335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
82345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
82355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
82365d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
8237*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP8:%.*]] = ashr <2 x i64> [[_MSLD]], splat (i64 1)
82385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP9:%.*]] = or <2 x i64> [[TMP8]], zeroinitializer
8239*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = ashr <2 x i64> [[TMP1]], splat (i64 1)
82405d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8241*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP10:%.*]], label [[TMP11:%.*]], !prof [[PROF1]]
82425d0a12d3SThurston Dang; CHECK:       10:
82435d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
82445d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
82455d0a12d3SThurston Dang; CHECK:       11:
82465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i64>, ptr [[B]], align 16
82475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = ptrtoint ptr [[B]] to i64
82485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = xor i64 [[TMP12]], 193514046488576
82495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = inttoptr i64 [[TMP13]] to ptr
82505d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP14]], align 16
82515d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP9]], [[_MSLD1]]
82525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = add <2 x i64> [[TMP3]], [[TMP4]]
82535d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 8
82545d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP5]]
82555d0a12d3SThurston Dang;
82565d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
82575d0a12d3SThurston Dang  %tmp3 = ashr <2 x i64> %tmp1, <i64 1, i64 1>
82585d0a12d3SThurston Dang  %tmp4 = load <2 x i64>, ptr %B
82595d0a12d3SThurston Dang  %tmp5 = add <2 x i64> %tmp3, %tmp4
82605d0a12d3SThurston Dang  ret <2 x i64> %tmp5
82615d0a12d3SThurston Dang}
82625d0a12d3SThurston Dang
82635d0a12d3SThurston Dangdefine <8 x i8> @shr_orr8b(ptr %A, ptr %B) nounwind sanitize_memory {
82645d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @shr_orr8b(
82655d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
82665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
82675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
82685d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
82695d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8270*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
82715d0a12d3SThurston Dang; CHECK:       3:
82725d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
82735d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
82745d0a12d3SThurston Dang; CHECK:       4:
82755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
82765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
82775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
82785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
82795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
82805d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8281*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
82825d0a12d3SThurston Dang; CHECK:       8:
82835d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
82845d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
82855d0a12d3SThurston Dang; CHECK:       9:
82865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i8>, ptr [[B]], align 8
82875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
82885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
82895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
82905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP12]], align 8
8291*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = lshr <8 x i8> [[_MSLD]], splat (i8 1)
82925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i8> [[TMP13]], zeroinitializer
8293*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <8 x i8> [[TMP1]], splat (i8 1)
8294*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <8 x i8> [[TMP3]], splat (i8 -1)
8295*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <8 x i8> [[TMP4]], splat (i8 -1)
82965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <8 x i8> [[TMP14]], [[_MSLD1]]
82975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <8 x i8> [[TMP15]], [[_MSLD1]]
82985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <8 x i8> [[TMP14]], [[TMP16]]
82995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <8 x i8> [[TMP17]], [[TMP18]]
83005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <8 x i8> [[TMP20]], [[TMP19]]
83015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <8 x i8> [[TMP3]], [[TMP4]]
83025d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[TMP21]], ptr @__msan_retval_tls, align 8
83035d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP5]]
83045d0a12d3SThurston Dang;
83055d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
83065d0a12d3SThurston Dang  %tmp4 = load <8 x i8>, ptr %B
83075d0a12d3SThurston Dang  %tmp3 = lshr <8 x i8> %tmp1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
83085d0a12d3SThurston Dang  %tmp5 = or <8 x i8> %tmp3, %tmp4
83095d0a12d3SThurston Dang  ret <8 x i8> %tmp5
83105d0a12d3SThurston Dang}
83115d0a12d3SThurston Dang
83125d0a12d3SThurston Dangdefine <4 x i16> @shr_orr4h(ptr %A, ptr %B) nounwind sanitize_memory {
83135d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @shr_orr4h(
83145d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
83155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
83165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
83175d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
83185d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8319*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
83205d0a12d3SThurston Dang; CHECK:       3:
83215d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
83225d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
83235d0a12d3SThurston Dang; CHECK:       4:
83245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
83255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
83265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
83275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
83285d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
83295d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8330*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
83315d0a12d3SThurston Dang; CHECK:       8:
83325d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
83335d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
83345d0a12d3SThurston Dang; CHECK:       9:
83355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i16>, ptr [[B]], align 8
83365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
83375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
83385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
83395d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP12]], align 8
8340*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = lshr <4 x i16> [[_MSLD]], splat (i16 1)
83415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i16> [[TMP13]], zeroinitializer
8342*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <4 x i16> [[TMP1]], splat (i16 1)
8343*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <4 x i16> [[TMP3]], splat (i16 -1)
8344*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <4 x i16> [[TMP4]], splat (i16 -1)
83455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <4 x i16> [[TMP14]], [[_MSLD1]]
83465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <4 x i16> [[TMP15]], [[_MSLD1]]
83475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <4 x i16> [[TMP14]], [[TMP16]]
83485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <4 x i16> [[TMP17]], [[TMP18]]
83495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <4 x i16> [[TMP20]], [[TMP19]]
83505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <4 x i16> [[TMP3]], [[TMP4]]
83515d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[TMP21]], ptr @__msan_retval_tls, align 8
83525d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP5]]
83535d0a12d3SThurston Dang;
83545d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
83555d0a12d3SThurston Dang  %tmp4 = load <4 x i16>, ptr %B
83565d0a12d3SThurston Dang  %tmp3 = lshr <4 x i16> %tmp1, <i16 1, i16 1, i16 1, i16 1>
83575d0a12d3SThurston Dang  %tmp5 = or <4 x i16> %tmp3, %tmp4
83585d0a12d3SThurston Dang  ret <4 x i16> %tmp5
83595d0a12d3SThurston Dang}
83605d0a12d3SThurston Dang
83615d0a12d3SThurston Dangdefine <2 x i32> @shr_orr2s(ptr %A, ptr %B) nounwind sanitize_memory {
83625d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @shr_orr2s(
83635d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
83645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
83655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
83665d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
83675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8368*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
83695d0a12d3SThurston Dang; CHECK:       3:
83705d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
83715d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
83725d0a12d3SThurston Dang; CHECK:       4:
83735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
83745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
83755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
83765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
83775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
83785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8379*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
83805d0a12d3SThurston Dang; CHECK:       8:
83815d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
83825d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
83835d0a12d3SThurston Dang; CHECK:       9:
83845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i32>, ptr [[B]], align 8
83855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
83865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
83875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
83885d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP12]], align 8
8389*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = lshr <2 x i32> [[_MSLD]], splat (i32 1)
83905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i32> [[TMP13]], zeroinitializer
8391*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <2 x i32> [[TMP1]], splat (i32 1)
8392*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <2 x i32> [[TMP3]], splat (i32 -1)
8393*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <2 x i32> [[TMP4]], splat (i32 -1)
83945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <2 x i32> [[TMP14]], [[_MSLD1]]
83955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <2 x i32> [[TMP15]], [[_MSLD1]]
83965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <2 x i32> [[TMP14]], [[TMP16]]
83975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <2 x i32> [[TMP17]], [[TMP18]]
83985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <2 x i32> [[TMP20]], [[TMP19]]
83995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <2 x i32> [[TMP3]], [[TMP4]]
84005d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[TMP21]], ptr @__msan_retval_tls, align 8
84015d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP5]]
84025d0a12d3SThurston Dang;
84035d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
84045d0a12d3SThurston Dang  %tmp4 = load <2 x i32>, ptr %B
84055d0a12d3SThurston Dang  %tmp3 = lshr <2 x i32> %tmp1, <i32 1, i32 1>
84065d0a12d3SThurston Dang  %tmp5 = or <2 x i32> %tmp3, %tmp4
84075d0a12d3SThurston Dang  ret <2 x i32> %tmp5
84085d0a12d3SThurston Dang}
84095d0a12d3SThurston Dang
84105d0a12d3SThurston Dangdefine <16 x i8> @shr_orr16b(ptr %A, ptr %B) nounwind sanitize_memory {
84115d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @shr_orr16b(
84125d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
84135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
84145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
84155d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
84165d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8417*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
84185d0a12d3SThurston Dang; CHECK:       3:
84195d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
84205d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
84215d0a12d3SThurston Dang; CHECK:       4:
84225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
84235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
84245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
84255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
84265d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
84275d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8428*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
84295d0a12d3SThurston Dang; CHECK:       8:
84305d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
84315d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
84325d0a12d3SThurston Dang; CHECK:       9:
84335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <16 x i8>, ptr [[B]], align 16
84345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
84355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
84365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
84375d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP12]], align 16
8438*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = lshr <16 x i8> [[_MSLD]], splat (i8 1)
84395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <16 x i8> [[TMP13]], zeroinitializer
8440*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <16 x i8> [[TMP1]], splat (i8 1)
8441*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <16 x i8> [[TMP3]], splat (i8 -1)
8442*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <16 x i8> [[TMP4]], splat (i8 -1)
84435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <16 x i8> [[TMP14]], [[_MSLD1]]
84445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <16 x i8> [[TMP15]], [[_MSLD1]]
84455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <16 x i8> [[TMP14]], [[TMP16]]
84465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <16 x i8> [[TMP17]], [[TMP18]]
84475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <16 x i8> [[TMP20]], [[TMP19]]
84485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <16 x i8> [[TMP3]], [[TMP4]]
84495d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[TMP21]], ptr @__msan_retval_tls, align 8
84505d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP5]]
84515d0a12d3SThurston Dang;
84525d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
84535d0a12d3SThurston Dang  %tmp4 = load <16 x i8>, ptr %B
84545d0a12d3SThurston Dang  %tmp3 = lshr <16 x i8> %tmp1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
84555d0a12d3SThurston Dang  %tmp5 = or <16 x i8> %tmp3, %tmp4
84565d0a12d3SThurston Dang  ret <16 x i8> %tmp5
84575d0a12d3SThurston Dang}
84585d0a12d3SThurston Dang
84595d0a12d3SThurston Dangdefine <8 x i16> @shr_orr8h(ptr %A, ptr %B) nounwind sanitize_memory {
84605d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @shr_orr8h(
84615d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
84625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
84635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
84645d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
84655d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8466*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
84675d0a12d3SThurston Dang; CHECK:       3:
84685d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
84695d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
84705d0a12d3SThurston Dang; CHECK:       4:
84715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
84725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
84735d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
84745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
84755d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
84765d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8477*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
84785d0a12d3SThurston Dang; CHECK:       8:
84795d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
84805d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
84815d0a12d3SThurston Dang; CHECK:       9:
84825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i16>, ptr [[B]], align 16
84835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
84845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
84855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
84865d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
8487*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = lshr <8 x i16> [[_MSLD]], splat (i16 1)
84885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i16> [[TMP13]], zeroinitializer
8489*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <8 x i16> [[TMP1]], splat (i16 1)
8490*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <8 x i16> [[TMP3]], splat (i16 -1)
8491*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <8 x i16> [[TMP4]], splat (i16 -1)
84925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <8 x i16> [[TMP14]], [[_MSLD1]]
84935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <8 x i16> [[TMP15]], [[_MSLD1]]
84945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <8 x i16> [[TMP14]], [[TMP16]]
84955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <8 x i16> [[TMP17]], [[TMP18]]
84965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <8 x i16> [[TMP20]], [[TMP19]]
84975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <8 x i16> [[TMP3]], [[TMP4]]
84985d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[TMP21]], ptr @__msan_retval_tls, align 8
84995d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP5]]
85005d0a12d3SThurston Dang;
85015d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
85025d0a12d3SThurston Dang  %tmp4 = load <8 x i16>, ptr %B
85035d0a12d3SThurston Dang  %tmp3 = lshr <8 x i16> %tmp1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
85045d0a12d3SThurston Dang  %tmp5 = or <8 x i16> %tmp3, %tmp4
85055d0a12d3SThurston Dang  ret <8 x i16> %tmp5
85065d0a12d3SThurston Dang}
85075d0a12d3SThurston Dang
85085d0a12d3SThurston Dangdefine <4 x i32> @shr_orr4s(ptr %A, ptr %B) nounwind sanitize_memory {
85095d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @shr_orr4s(
85105d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
85115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
85125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
85135d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
85145d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8515*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
85165d0a12d3SThurston Dang; CHECK:       3:
85175d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
85185d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
85195d0a12d3SThurston Dang; CHECK:       4:
85205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
85215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
85225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
85235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
85245d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
85255d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8526*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
85275d0a12d3SThurston Dang; CHECK:       8:
85285d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
85295d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
85305d0a12d3SThurston Dang; CHECK:       9:
85315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i32>, ptr [[B]], align 16
85325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
85335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
85345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
85355d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
8536*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = lshr <4 x i32> [[_MSLD]], splat (i32 1)
85375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i32> [[TMP13]], zeroinitializer
8538*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <4 x i32> [[TMP1]], splat (i32 1)
8539*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <4 x i32> [[TMP3]], splat (i32 -1)
8540*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <4 x i32> [[TMP4]], splat (i32 -1)
85415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <4 x i32> [[TMP14]], [[_MSLD1]]
85425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <4 x i32> [[TMP15]], [[_MSLD1]]
85435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <4 x i32> [[TMP14]], [[TMP16]]
85445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <4 x i32> [[TMP17]], [[TMP18]]
85455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <4 x i32> [[TMP20]], [[TMP19]]
85465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <4 x i32> [[TMP3]], [[TMP4]]
85475d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[TMP21]], ptr @__msan_retval_tls, align 8
85485d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP5]]
85495d0a12d3SThurston Dang;
85505d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
85515d0a12d3SThurston Dang  %tmp4 = load <4 x i32>, ptr %B
85525d0a12d3SThurston Dang  %tmp3 = lshr <4 x i32> %tmp1, <i32 1, i32 1, i32 1, i32 1>
85535d0a12d3SThurston Dang  %tmp5 = or <4 x i32> %tmp3, %tmp4
85545d0a12d3SThurston Dang  ret <4 x i32> %tmp5
85555d0a12d3SThurston Dang}
85565d0a12d3SThurston Dang
85575d0a12d3SThurston Dangdefine <2 x i64> @shr_orr2d(ptr %A, ptr %B) nounwind sanitize_memory {
85585d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @shr_orr2d(
85595d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
85605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
85615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
85625d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
85635d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8564*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
85655d0a12d3SThurston Dang; CHECK:       3:
85665d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
85675d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
85685d0a12d3SThurston Dang; CHECK:       4:
85695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
85705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
85715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
85725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
85735d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
85745d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8575*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
85765d0a12d3SThurston Dang; CHECK:       8:
85775d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
85785d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
85795d0a12d3SThurston Dang; CHECK:       9:
85805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i64>, ptr [[B]], align 16
85815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
85825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
85835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
85845d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
8585*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = lshr <2 x i64> [[_MSLD]], splat (i64 1)
85865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i64> [[TMP13]], zeroinitializer
8587*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = lshr <2 x i64> [[TMP1]], splat (i64 1)
8588*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <2 x i64> [[TMP3]], splat (i64 -1)
8589*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <2 x i64> [[TMP4]], splat (i64 -1)
85905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <2 x i64> [[TMP14]], [[_MSLD1]]
85915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <2 x i64> [[TMP15]], [[_MSLD1]]
85925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <2 x i64> [[TMP14]], [[TMP16]]
85935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <2 x i64> [[TMP17]], [[TMP18]]
85945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <2 x i64> [[TMP20]], [[TMP19]]
85955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <2 x i64> [[TMP3]], [[TMP4]]
85965d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[TMP21]], ptr @__msan_retval_tls, align 8
85975d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP5]]
85985d0a12d3SThurston Dang;
85995d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
86005d0a12d3SThurston Dang  %tmp4 = load <2 x i64>, ptr %B
86015d0a12d3SThurston Dang  %tmp3 = lshr <2 x i64> %tmp1, <i64 1, i64 1>
86025d0a12d3SThurston Dang  %tmp5 = or <2 x i64> %tmp3, %tmp4
86035d0a12d3SThurston Dang  ret <2 x i64> %tmp5
86045d0a12d3SThurston Dang}
86055d0a12d3SThurston Dang
86065d0a12d3SThurston Dangdefine <8 x i8> @shl_orr8b(ptr %A, ptr %B) nounwind sanitize_memory {
86075d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @shl_orr8b(
86085d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
86095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
86105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
86115d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
86125d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8613*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
86145d0a12d3SThurston Dang; CHECK:       3:
86155d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
86165d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
86175d0a12d3SThurston Dang; CHECK:       4:
86185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
86195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
86205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
86215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
86225d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
86235d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8624*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
86255d0a12d3SThurston Dang; CHECK:       8:
86265d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
86275d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
86285d0a12d3SThurston Dang; CHECK:       9:
86295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i8>, ptr [[B]], align 8
86305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
86315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
86325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
86335d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP12]], align 8
8634*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = shl <8 x i8> [[_MSLD]], splat (i8 1)
86355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i8> [[TMP13]], zeroinitializer
8636*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <8 x i8> [[TMP1]], splat (i8 1)
8637*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <8 x i8> [[TMP3]], splat (i8 -1)
8638*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <8 x i8> [[TMP4]], splat (i8 -1)
86395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <8 x i8> [[TMP14]], [[_MSLD1]]
86405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <8 x i8> [[TMP15]], [[_MSLD1]]
86415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <8 x i8> [[TMP14]], [[TMP16]]
86425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <8 x i8> [[TMP17]], [[TMP18]]
86435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <8 x i8> [[TMP20]], [[TMP19]]
86445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <8 x i8> [[TMP3]], [[TMP4]]
86455d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> [[TMP21]], ptr @__msan_retval_tls, align 8
86465d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP5]]
86475d0a12d3SThurston Dang;
86485d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
86495d0a12d3SThurston Dang  %tmp4 = load <8 x i8>, ptr %B
86505d0a12d3SThurston Dang  %tmp3 = shl <8 x i8> %tmp1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
86515d0a12d3SThurston Dang  %tmp5 = or <8 x i8> %tmp3, %tmp4
86525d0a12d3SThurston Dang  ret <8 x i8> %tmp5
86535d0a12d3SThurston Dang}
86545d0a12d3SThurston Dang
86555d0a12d3SThurston Dangdefine <4 x i16> @shl_orr4h(ptr %A, ptr %B) nounwind sanitize_memory {
86565d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @shl_orr4h(
86575d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
86585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
86595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
86605d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
86615d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8662*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
86635d0a12d3SThurston Dang; CHECK:       3:
86645d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
86655d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
86665d0a12d3SThurston Dang; CHECK:       4:
86675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
86685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
86695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
86705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
86715d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
86725d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8673*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
86745d0a12d3SThurston Dang; CHECK:       8:
86755d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
86765d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
86775d0a12d3SThurston Dang; CHECK:       9:
86785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i16>, ptr [[B]], align 8
86795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
86805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
86815d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
86825d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP12]], align 8
8683*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = shl <4 x i16> [[_MSLD]], splat (i16 1)
86845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i16> [[TMP13]], zeroinitializer
8685*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <4 x i16> [[TMP1]], splat (i16 1)
8686*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <4 x i16> [[TMP3]], splat (i16 -1)
8687*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <4 x i16> [[TMP4]], splat (i16 -1)
86885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <4 x i16> [[TMP14]], [[_MSLD1]]
86895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <4 x i16> [[TMP15]], [[_MSLD1]]
86905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <4 x i16> [[TMP14]], [[TMP16]]
86915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <4 x i16> [[TMP17]], [[TMP18]]
86925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <4 x i16> [[TMP20]], [[TMP19]]
86935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <4 x i16> [[TMP3]], [[TMP4]]
86945d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> [[TMP21]], ptr @__msan_retval_tls, align 8
86955d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP5]]
86965d0a12d3SThurston Dang;
86975d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
86985d0a12d3SThurston Dang  %tmp4 = load <4 x i16>, ptr %B
86995d0a12d3SThurston Dang  %tmp3 = shl <4 x i16> %tmp1, <i16 1, i16 1, i16 1, i16 1>
87005d0a12d3SThurston Dang  %tmp5 = or <4 x i16> %tmp3, %tmp4
87015d0a12d3SThurston Dang  ret <4 x i16> %tmp5
87025d0a12d3SThurston Dang}
87035d0a12d3SThurston Dang
87045d0a12d3SThurston Dangdefine <2 x i32> @shl_orr2s(ptr %A, ptr %B) nounwind sanitize_memory {
87055d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @shl_orr2s(
87065d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
87075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
87085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
87095d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
87105d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8711*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
87125d0a12d3SThurston Dang; CHECK:       3:
87135d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
87145d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
87155d0a12d3SThurston Dang; CHECK:       4:
87165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
87175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
87185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
87195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
87205d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
87215d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8722*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
87235d0a12d3SThurston Dang; CHECK:       8:
87245d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
87255d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
87265d0a12d3SThurston Dang; CHECK:       9:
87275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i32>, ptr [[B]], align 8
87285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
87295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
87305d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
87315d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP12]], align 8
8732*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = shl <2 x i32> [[_MSLD]], splat (i32 1)
87335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i32> [[TMP13]], zeroinitializer
8734*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <2 x i32> [[TMP1]], splat (i32 1)
8735*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <2 x i32> [[TMP3]], splat (i32 -1)
8736*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <2 x i32> [[TMP4]], splat (i32 -1)
87375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <2 x i32> [[TMP14]], [[_MSLD1]]
87385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <2 x i32> [[TMP15]], [[_MSLD1]]
87395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <2 x i32> [[TMP14]], [[TMP16]]
87405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <2 x i32> [[TMP17]], [[TMP18]]
87415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <2 x i32> [[TMP20]], [[TMP19]]
87425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <2 x i32> [[TMP3]], [[TMP4]]
87435d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> [[TMP21]], ptr @__msan_retval_tls, align 8
87445d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP5]]
87455d0a12d3SThurston Dang;
87465d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
87475d0a12d3SThurston Dang  %tmp4 = load <2 x i32>, ptr %B
87485d0a12d3SThurston Dang  %tmp3 = shl <2 x i32> %tmp1, <i32 1, i32 1>
87495d0a12d3SThurston Dang  %tmp5 = or <2 x i32> %tmp3, %tmp4
87505d0a12d3SThurston Dang  ret <2 x i32> %tmp5
87515d0a12d3SThurston Dang}
87525d0a12d3SThurston Dang
87535d0a12d3SThurston Dangdefine <16 x i8> @shl_orr16b(ptr %A, ptr %B) nounwind sanitize_memory {
87545d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @shl_orr16b(
87555d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
87565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
87575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
87585d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
87595d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8760*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
87615d0a12d3SThurston Dang; CHECK:       3:
87625d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
87635d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
87645d0a12d3SThurston Dang; CHECK:       4:
87655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
87665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
87675d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
87685d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
87695d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
87705d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8771*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
87725d0a12d3SThurston Dang; CHECK:       8:
87735d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
87745d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
87755d0a12d3SThurston Dang; CHECK:       9:
87765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <16 x i8>, ptr [[B]], align 16
87775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
87785d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
87795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
87805d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP12]], align 16
8781*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = shl <16 x i8> [[_MSLD]], splat (i8 1)
87825d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <16 x i8> [[TMP13]], zeroinitializer
8783*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <16 x i8> [[TMP1]], splat (i8 1)
8784*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <16 x i8> [[TMP3]], splat (i8 -1)
8785*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <16 x i8> [[TMP4]], splat (i8 -1)
87865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <16 x i8> [[TMP14]], [[_MSLD1]]
87875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <16 x i8> [[TMP15]], [[_MSLD1]]
87885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <16 x i8> [[TMP14]], [[TMP16]]
87895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <16 x i8> [[TMP17]], [[TMP18]]
87905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <16 x i8> [[TMP20]], [[TMP19]]
87915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <16 x i8> [[TMP3]], [[TMP4]]
87925d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> [[TMP21]], ptr @__msan_retval_tls, align 8
87935d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP5]]
87945d0a12d3SThurston Dang;
87955d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
87965d0a12d3SThurston Dang  %tmp4 = load <16 x i8>, ptr %B
87975d0a12d3SThurston Dang  %tmp3 = shl <16 x i8> %tmp1, <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>
87985d0a12d3SThurston Dang  %tmp5 = or <16 x i8> %tmp3, %tmp4
87995d0a12d3SThurston Dang  ret <16 x i8> %tmp5
88005d0a12d3SThurston Dang}
88015d0a12d3SThurston Dang
88025d0a12d3SThurston Dangdefine <8 x i16> @shl_orr8h(ptr %A, ptr %B) nounwind sanitize_memory {
88035d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @shl_orr8h(
88045d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
88055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
88065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
88075d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
88085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8809*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
88105d0a12d3SThurston Dang; CHECK:       3:
88115d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
88125d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
88135d0a12d3SThurston Dang; CHECK:       4:
88145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
88155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
88165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
88175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
88185d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
88195d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8820*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
88215d0a12d3SThurston Dang; CHECK:       8:
88225d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
88235d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
88245d0a12d3SThurston Dang; CHECK:       9:
88255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i16>, ptr [[B]], align 16
88265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
88275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
88285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
88295d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
8830*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = shl <8 x i16> [[_MSLD]], splat (i16 1)
88315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <8 x i16> [[TMP13]], zeroinitializer
8832*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <8 x i16> [[TMP1]], splat (i16 1)
8833*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <8 x i16> [[TMP3]], splat (i16 -1)
8834*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <8 x i16> [[TMP4]], splat (i16 -1)
88355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <8 x i16> [[TMP14]], [[_MSLD1]]
88365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <8 x i16> [[TMP15]], [[_MSLD1]]
88375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <8 x i16> [[TMP14]], [[TMP16]]
88385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <8 x i16> [[TMP17]], [[TMP18]]
88395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <8 x i16> [[TMP20]], [[TMP19]]
88405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <8 x i16> [[TMP3]], [[TMP4]]
88415d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[TMP21]], ptr @__msan_retval_tls, align 8
88425d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP5]]
88435d0a12d3SThurston Dang;
88445d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
88455d0a12d3SThurston Dang  %tmp4 = load <8 x i16>, ptr %B
88465d0a12d3SThurston Dang  %tmp3 = shl <8 x i16> %tmp1, <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
88475d0a12d3SThurston Dang  %tmp5 = or <8 x i16> %tmp3, %tmp4
88485d0a12d3SThurston Dang  ret <8 x i16> %tmp5
88495d0a12d3SThurston Dang}
88505d0a12d3SThurston Dang
88515d0a12d3SThurston Dangdefine <4 x i32> @shl_orr4s(ptr %A, ptr %B) nounwind sanitize_memory {
88525d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @shl_orr4s(
88535d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
88545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
88555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
88565d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
88575d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8858*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
88595d0a12d3SThurston Dang; CHECK:       3:
88605d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
88615d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
88625d0a12d3SThurston Dang; CHECK:       4:
88635d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
88645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
88655d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
88665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
88675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
88685d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8869*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
88705d0a12d3SThurston Dang; CHECK:       8:
88715d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
88725d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
88735d0a12d3SThurston Dang; CHECK:       9:
88745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i32>, ptr [[B]], align 16
88755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
88765d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
88775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
88785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
8879*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = shl <4 x i32> [[_MSLD]], splat (i32 1)
88805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <4 x i32> [[TMP13]], zeroinitializer
8881*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <4 x i32> [[TMP1]], splat (i32 1)
8882*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <4 x i32> [[TMP3]], splat (i32 -1)
8883*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <4 x i32> [[TMP4]], splat (i32 -1)
88845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <4 x i32> [[TMP14]], [[_MSLD1]]
88855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <4 x i32> [[TMP15]], [[_MSLD1]]
88865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <4 x i32> [[TMP14]], [[TMP16]]
88875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <4 x i32> [[TMP17]], [[TMP18]]
88885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <4 x i32> [[TMP20]], [[TMP19]]
88895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <4 x i32> [[TMP3]], [[TMP4]]
88905d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[TMP21]], ptr @__msan_retval_tls, align 8
88915d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP5]]
88925d0a12d3SThurston Dang;
88935d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
88945d0a12d3SThurston Dang  %tmp4 = load <4 x i32>, ptr %B
88955d0a12d3SThurston Dang  %tmp3 = shl <4 x i32> %tmp1, <i32 1, i32 1, i32 1, i32 1>
88965d0a12d3SThurston Dang  %tmp5 = or <4 x i32> %tmp3, %tmp4
88975d0a12d3SThurston Dang  ret <4 x i32> %tmp5
88985d0a12d3SThurston Dang}
88995d0a12d3SThurston Dang
89005d0a12d3SThurston Dangdefine <2 x i64> @shl_orr2d(ptr %A, ptr %B) nounwind sanitize_memory {
89015d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @shl_orr2d(
89025d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
89035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
89045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
89055d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
89065d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8907*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
89085d0a12d3SThurston Dang; CHECK:       3:
89095d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
89105d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
89115d0a12d3SThurston Dang; CHECK:       4:
89125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
89135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
89145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
89155d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
89165d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
89175d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
8918*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
89195d0a12d3SThurston Dang; CHECK:       8:
89205d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
89215d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
89225d0a12d3SThurston Dang; CHECK:       9:
89235d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i64>, ptr [[B]], align 16
89245d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
89255d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
89265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
89275d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
8928*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP13:%.*]] = shl <2 x i64> [[_MSLD]], splat (i64 1)
89295d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = or <2 x i64> [[TMP13]], zeroinitializer
8930*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP3:%.*]] = shl <2 x i64> [[TMP1]], splat (i64 1)
8931*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP15:%.*]] = xor <2 x i64> [[TMP3]], splat (i64 -1)
8932*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP16:%.*]] = xor <2 x i64> [[TMP4]], splat (i64 -1)
89335d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP17:%.*]] = and <2 x i64> [[TMP14]], [[_MSLD1]]
89345d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP18:%.*]] = and <2 x i64> [[TMP15]], [[_MSLD1]]
89355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP19:%.*]] = and <2 x i64> [[TMP14]], [[TMP16]]
89365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP20:%.*]] = or <2 x i64> [[TMP17]], [[TMP18]]
89375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP21:%.*]] = or <2 x i64> [[TMP20]], [[TMP19]]
89385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = or <2 x i64> [[TMP3]], [[TMP4]]
89395d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[TMP21]], ptr @__msan_retval_tls, align 8
89405d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP5]]
89415d0a12d3SThurston Dang;
89425d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
89435d0a12d3SThurston Dang  %tmp4 = load <2 x i64>, ptr %B
89445d0a12d3SThurston Dang  %tmp3 = shl <2 x i64> %tmp1, <i64 1, i64 1>
89455d0a12d3SThurston Dang  %tmp5 = or <2 x i64> %tmp3, %tmp4
89465d0a12d3SThurston Dang  ret <2 x i64> %tmp5
89475d0a12d3SThurston Dang}
89485d0a12d3SThurston Dang
89495d0a12d3SThurston Dangdefine <8 x i16> @shll(<8 x i8> %in) sanitize_memory {
89505d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @shll(
89515d0a12d3SThurston Dang; CHECK-SAME: <8 x i8> [[IN:%.*]]) #[[ATTR3:[0-9]+]] {
89525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr @__msan_param_tls, align 8
89535d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
89545d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <8 x i8> [[TMP1]] to <8 x i16>
89555d0a12d3SThurston Dang; CHECK-NEXT:    [[EXT:%.*]] = zext <8 x i8> [[IN]] to <8 x i16>
8956*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP2:%.*]] = shl <8 x i16> [[_MSPROP]], splat (i16 8)
89575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = or <8 x i16> [[TMP2]], zeroinitializer
8958*38fffa63SPaul Walker; CHECK-NEXT:    [[RES:%.*]] = shl <8 x i16> [[EXT]], splat (i16 8)
89595d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> [[TMP3]], ptr @__msan_retval_tls, align 8
89605d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[RES]]
89615d0a12d3SThurston Dang;
89625d0a12d3SThurston Dang  %ext = zext <8 x i8> %in to <8 x i16>
89635d0a12d3SThurston Dang  %res = shl <8 x i16> %ext, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
89645d0a12d3SThurston Dang  ret <8 x i16> %res
89655d0a12d3SThurston Dang}
89665d0a12d3SThurston Dang
89675d0a12d3SThurston Dangdefine <4 x i32> @shll_high(<8 x i16> %in) sanitize_memory {
89685d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @shll_high(
89695d0a12d3SThurston Dang; CHECK-SAME: <8 x i16> [[IN:%.*]]) #[[ATTR3]] {
89705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8
89715d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
8972*38fffa63SPaul Walker; CHECK-NEXT:    [[_MSPROP:%.*]] = shufflevector <8 x i16> [[TMP1]], <8 x i16> splat (i16 -1), <4 x i32> <i32 4, i32 5, i32 6, i32 7>
89735d0a12d3SThurston Dang; CHECK-NEXT:    [[EXTRACT:%.*]] = shufflevector <8 x i16> [[IN]], <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
89745d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = zext <4 x i16> [[_MSPROP]] to <4 x i32>
89755d0a12d3SThurston Dang; CHECK-NEXT:    [[EXT:%.*]] = zext <4 x i16> [[EXTRACT]] to <4 x i32>
8976*38fffa63SPaul Walker; CHECK-NEXT:    [[TMP2:%.*]] = shl <4 x i32> [[_MSPROP1]], splat (i32 16)
89775d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = or <4 x i32> [[TMP2]], zeroinitializer
8978*38fffa63SPaul Walker; CHECK-NEXT:    [[RES:%.*]] = shl <4 x i32> [[EXT]], splat (i32 16)
89795d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> [[TMP3]], ptr @__msan_retval_tls, align 8
89805d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[RES]]
89815d0a12d3SThurston Dang;
89825d0a12d3SThurston Dang  %extract = shufflevector <8 x i16> %in, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
89835d0a12d3SThurston Dang  %ext = zext <4 x i16> %extract to <4 x i32>
89845d0a12d3SThurston Dang  %res = shl <4 x i32> %ext, <i32 16, i32 16, i32 16, i32 16>
89855d0a12d3SThurston Dang  ret <4 x i32> %res
89865d0a12d3SThurston Dang}
89875d0a12d3SThurston Dang
89885d0a12d3SThurston Dangdefine <8 x i8> @sli8b(ptr %A, ptr %B) nounwind sanitize_memory {
89895d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i8> @sli8b(
89905d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
89915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
89925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
89935d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
89945d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
8995*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
89965d0a12d3SThurston Dang; CHECK:       3:
89975d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
89985d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
89995d0a12d3SThurston Dang; CHECK:       4:
90005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i8>, ptr [[A]], align 8
90015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
90025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
90035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
90045d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i8>, ptr [[TMP7]], align 8
90055d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
9006*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
90075d0a12d3SThurston Dang; CHECK:       8:
90085d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
90095d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
90105d0a12d3SThurston Dang; CHECK:       9:
90115d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[B]], align 8
90125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
90135d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
90145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
90155d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i8>, ptr [[TMP12]], align 8
90165d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i8> [[_MSLD]] to i64
90175d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP13]], 0
90185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <8 x i8> [[_MSLD1]] to i64
90195d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP4:%.*]] = icmp ne i64 [[TMP14]], 0
90205d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP3]], [[_MSCMP4]]
9021*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSOR]], label [[TMP15:%.*]], label [[TMP16:%.*]], !prof [[PROF1]]
90225d0a12d3SThurston Dang; CHECK:       15:
90235d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
90245d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
90255d0a12d3SThurston Dang; CHECK:       16:
90265d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i8> @llvm.aarch64.neon.vsli.v8i8(<8 x i8> [[TMP1]], <8 x i8> [[TMP2]], i32 1)
90275d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i8> zeroinitializer, ptr @__msan_retval_tls, align 8
90285d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i8> [[TMP3]]
90295d0a12d3SThurston Dang;
90305d0a12d3SThurston Dang  %tmp1 = load <8 x i8>, ptr %A
90315d0a12d3SThurston Dang  %tmp2 = load <8 x i8>, ptr %B
90325d0a12d3SThurston Dang  %tmp3 = call <8 x i8> @llvm.aarch64.neon.vsli.v8i8(<8 x i8> %tmp1, <8 x i8> %tmp2, i32 1)
90335d0a12d3SThurston Dang  ret <8 x i8> %tmp3
90345d0a12d3SThurston Dang}
90355d0a12d3SThurston Dang
90365d0a12d3SThurston Dangdefine <4 x i16> @sli4h(ptr %A, ptr %B) nounwind sanitize_memory {
90375d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @sli4h(
90385d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
90395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
90405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
90415d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
90425d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
9043*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
90445d0a12d3SThurston Dang; CHECK:       3:
90455d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
90465d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
90475d0a12d3SThurston Dang; CHECK:       4:
90485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i16>, ptr [[A]], align 8
90495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
90505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
90515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
90525d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i16>, ptr [[TMP7]], align 8
90535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
9054*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
90555d0a12d3SThurston Dang; CHECK:       8:
90565d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
90575d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
90585d0a12d3SThurston Dang; CHECK:       9:
90595d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr [[B]], align 8
90605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
90615d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
90625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
90635d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i16>, ptr [[TMP12]], align 8
90645d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i16> [[_MSLD]] to i64
90655d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP13]], 0
90665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <4 x i16> [[_MSLD1]] to i64
90675d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP4:%.*]] = icmp ne i64 [[TMP14]], 0
90685d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP3]], [[_MSCMP4]]
9069*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSOR]], label [[TMP15:%.*]], label [[TMP16:%.*]], !prof [[PROF1]]
90705d0a12d3SThurston Dang; CHECK:       15:
90715d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
90725d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
90735d0a12d3SThurston Dang; CHECK:       16:
90745d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i16> @llvm.aarch64.neon.vsli.v4i16(<4 x i16> [[TMP1]], <4 x i16> [[TMP2]], i32 1)
90755d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i16> zeroinitializer, ptr @__msan_retval_tls, align 8
90765d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[TMP3]]
90775d0a12d3SThurston Dang;
90785d0a12d3SThurston Dang  %tmp1 = load <4 x i16>, ptr %A
90795d0a12d3SThurston Dang  %tmp2 = load <4 x i16>, ptr %B
90805d0a12d3SThurston Dang  %tmp3 = call <4 x i16> @llvm.aarch64.neon.vsli.v4i16(<4 x i16> %tmp1, <4 x i16> %tmp2, i32 1)
90815d0a12d3SThurston Dang  ret <4 x i16> %tmp3
90825d0a12d3SThurston Dang}
90835d0a12d3SThurston Dang
90845d0a12d3SThurston Dangdefine <2 x i32> @sli2s(ptr %A, ptr %B) nounwind sanitize_memory {
90855d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i32> @sli2s(
90865d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
90875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
90885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
90895d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
90905d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
9091*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
90925d0a12d3SThurston Dang; CHECK:       3:
90935d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
90945d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
90955d0a12d3SThurston Dang; CHECK:       4:
90965d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i32>, ptr [[A]], align 8
90975d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
90985d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
90995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
91005d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i32>, ptr [[TMP7]], align 8
91015d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
9102*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
91035d0a12d3SThurston Dang; CHECK:       8:
91045d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
91055d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
91065d0a12d3SThurston Dang; CHECK:       9:
91075d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr [[B]], align 8
91085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
91095d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
91105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
91115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i32>, ptr [[TMP12]], align 8
91125d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i32> [[_MSLD]] to i64
91135d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP13]], 0
91145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <2 x i32> [[_MSLD1]] to i64
91155d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP4:%.*]] = icmp ne i64 [[TMP14]], 0
91165d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP3]], [[_MSCMP4]]
9117*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSOR]], label [[TMP15:%.*]], label [[TMP16:%.*]], !prof [[PROF1]]
91185d0a12d3SThurston Dang; CHECK:       15:
91195d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
91205d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
91215d0a12d3SThurston Dang; CHECK:       16:
91225d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i32> @llvm.aarch64.neon.vsli.v2i32(<2 x i32> [[TMP1]], <2 x i32> [[TMP2]], i32 1)
91235d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i32> zeroinitializer, ptr @__msan_retval_tls, align 8
91245d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i32> [[TMP3]]
91255d0a12d3SThurston Dang;
91265d0a12d3SThurston Dang  %tmp1 = load <2 x i32>, ptr %A
91275d0a12d3SThurston Dang  %tmp2 = load <2 x i32>, ptr %B
91285d0a12d3SThurston Dang  %tmp3 = call <2 x i32> @llvm.aarch64.neon.vsli.v2i32(<2 x i32> %tmp1, <2 x i32> %tmp2, i32 1)
91295d0a12d3SThurston Dang  ret <2 x i32> %tmp3
91305d0a12d3SThurston Dang}
91315d0a12d3SThurston Dang
91325d0a12d3SThurston Dangdefine <1 x i64> @sli1d(ptr %A, ptr %B) nounwind sanitize_memory {
91335d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @sli1d(
91345d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
91355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
91365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
91375d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
91385d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
9139*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
91405d0a12d3SThurston Dang; CHECK:       3:
91415d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
91425d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
91435d0a12d3SThurston Dang; CHECK:       4:
91445d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr [[A]], align 8
91455d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
91465d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
91475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
91485d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP7]], align 8
91495d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
9150*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
91515d0a12d3SThurston Dang; CHECK:       8:
91525d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
91535d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
91545d0a12d3SThurston Dang; CHECK:       9:
91555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr [[B]], align 8
91565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
91575d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
91585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
91595d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <1 x i64>, ptr [[TMP12]], align 8
91605d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <1 x i64> [[_MSLD]] to i64
91615d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i64 [[TMP13]], 0
91625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <1 x i64> [[_MSLD1]] to i64
91635d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP4:%.*]] = icmp ne i64 [[TMP14]], 0
91645d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP3]], [[_MSCMP4]]
9165*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSOR]], label [[TMP15:%.*]], label [[TMP16:%.*]], !prof [[PROF1]]
91665d0a12d3SThurston Dang; CHECK:       15:
91675d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
91685d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
91695d0a12d3SThurston Dang; CHECK:       16:
91705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <1 x i64> @llvm.aarch64.neon.vsli.v1i64(<1 x i64> [[TMP1]], <1 x i64> [[TMP2]], i32 1)
91715d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> zeroinitializer, ptr @__msan_retval_tls, align 8
91725d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[TMP3]]
91735d0a12d3SThurston Dang;
91745d0a12d3SThurston Dang  %tmp1 = load <1 x i64>, ptr %A
91755d0a12d3SThurston Dang  %tmp2 = load <1 x i64>, ptr %B
91765d0a12d3SThurston Dang  %tmp3 = call <1 x i64> @llvm.aarch64.neon.vsli.v1i64(<1 x i64> %tmp1, <1 x i64> %tmp2, i32 1)
91775d0a12d3SThurston Dang  ret <1 x i64> %tmp3
91785d0a12d3SThurston Dang}
91795d0a12d3SThurston Dang
91805d0a12d3SThurston Dangdefine <16 x i8> @sli16b(ptr %A, ptr %B) nounwind sanitize_memory {
91815d0a12d3SThurston Dang; CHECK-LABEL: define <16 x i8> @sli16b(
91825d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
91835d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
91845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
91855d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
91865d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
9187*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
91885d0a12d3SThurston Dang; CHECK:       3:
91895d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
91905d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
91915d0a12d3SThurston Dang; CHECK:       4:
91925d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr [[A]], align 16
91935d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
91945d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
91955d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
91965d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <16 x i8>, ptr [[TMP7]], align 16
91975d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
9198*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
91995d0a12d3SThurston Dang; CHECK:       8:
92005d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
92015d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
92025d0a12d3SThurston Dang; CHECK:       9:
92035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[B]], align 16
92045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
92055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
92065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
92075d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <16 x i8>, ptr [[TMP12]], align 16
92085d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <16 x i8> [[_MSLD]] to i128
92095d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i128 [[TMP13]], 0
92105d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <16 x i8> [[_MSLD1]] to i128
92115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP4:%.*]] = icmp ne i128 [[TMP14]], 0
92125d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP3]], [[_MSCMP4]]
9213*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSOR]], label [[TMP15:%.*]], label [[TMP16:%.*]], !prof [[PROF1]]
92145d0a12d3SThurston Dang; CHECK:       15:
92155d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
92165d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
92175d0a12d3SThurston Dang; CHECK:       16:
92185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <16 x i8> @llvm.aarch64.neon.vsli.v16i8(<16 x i8> [[TMP1]], <16 x i8> [[TMP2]], i32 1)
92195d0a12d3SThurston Dang; CHECK-NEXT:    store <16 x i8> zeroinitializer, ptr @__msan_retval_tls, align 8
92205d0a12d3SThurston Dang; CHECK-NEXT:    ret <16 x i8> [[TMP3]]
92215d0a12d3SThurston Dang;
92225d0a12d3SThurston Dang  %tmp1 = load <16 x i8>, ptr %A
92235d0a12d3SThurston Dang  %tmp2 = load <16 x i8>, ptr %B
92245d0a12d3SThurston Dang  %tmp3 = call <16 x i8> @llvm.aarch64.neon.vsli.v16i8(<16 x i8> %tmp1, <16 x i8> %tmp2, i32 1)
92255d0a12d3SThurston Dang  ret <16 x i8> %tmp3
92265d0a12d3SThurston Dang}
92275d0a12d3SThurston Dang
92285d0a12d3SThurston Dangdefine <8 x i16> @sli8h(ptr %A, ptr %B) nounwind sanitize_memory {
92295d0a12d3SThurston Dang; CHECK-LABEL: define <8 x i16> @sli8h(
92305d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
92315d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
92325d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
92335d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
92345d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
9235*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
92365d0a12d3SThurston Dang; CHECK:       3:
92375d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
92385d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
92395d0a12d3SThurston Dang; CHECK:       4:
92405d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[A]], align 16
92415d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
92425d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
92435d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
92445d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <8 x i16>, ptr [[TMP7]], align 16
92455d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
9246*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
92475d0a12d3SThurston Dang; CHECK:       8:
92485d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
92495d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
92505d0a12d3SThurston Dang; CHECK:       9:
92515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[B]], align 16
92525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
92535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
92545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
92555d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <8 x i16>, ptr [[TMP12]], align 16
92565d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <8 x i16> [[_MSLD]] to i128
92575d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i128 [[TMP13]], 0
92585d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <8 x i16> [[_MSLD1]] to i128
92595d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP4:%.*]] = icmp ne i128 [[TMP14]], 0
92605d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP3]], [[_MSCMP4]]
9261*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSOR]], label [[TMP15:%.*]], label [[TMP16:%.*]], !prof [[PROF1]]
92625d0a12d3SThurston Dang; CHECK:       15:
92635d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
92645d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
92655d0a12d3SThurston Dang; CHECK:       16:
92665d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <8 x i16> @llvm.aarch64.neon.vsli.v8i16(<8 x i16> [[TMP1]], <8 x i16> [[TMP2]], i32 1)
92675d0a12d3SThurston Dang; CHECK-NEXT:    store <8 x i16> zeroinitializer, ptr @__msan_retval_tls, align 8
92685d0a12d3SThurston Dang; CHECK-NEXT:    ret <8 x i16> [[TMP3]]
92695d0a12d3SThurston Dang;
92705d0a12d3SThurston Dang  %tmp1 = load <8 x i16>, ptr %A
92715d0a12d3SThurston Dang  %tmp2 = load <8 x i16>, ptr %B
92725d0a12d3SThurston Dang  %tmp3 = call <8 x i16> @llvm.aarch64.neon.vsli.v8i16(<8 x i16> %tmp1, <8 x i16> %tmp2, i32 1)
92735d0a12d3SThurston Dang  ret <8 x i16> %tmp3
92745d0a12d3SThurston Dang}
92755d0a12d3SThurston Dang
92765d0a12d3SThurston Dangdefine <4 x i32> @sli4s(ptr %A, ptr %B) nounwind sanitize_memory {
92775d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @sli4s(
92785d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
92795d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
92805d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
92815d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
92825d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
9283*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
92845d0a12d3SThurston Dang; CHECK:       3:
92855d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
92865d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
92875d0a12d3SThurston Dang; CHECK:       4:
92885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr [[A]], align 16
92895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
92905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
92915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
92925d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <4 x i32>, ptr [[TMP7]], align 16
92935d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
9294*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
92955d0a12d3SThurston Dang; CHECK:       8:
92965d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
92975d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
92985d0a12d3SThurston Dang; CHECK:       9:
92995d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr [[B]], align 16
93005d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
93015d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
93025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
93035d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <4 x i32>, ptr [[TMP12]], align 16
93045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <4 x i32> [[_MSLD]] to i128
93055d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i128 [[TMP13]], 0
93065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <4 x i32> [[_MSLD1]] to i128
93075d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP4:%.*]] = icmp ne i128 [[TMP14]], 0
93085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP3]], [[_MSCMP4]]
9309*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSOR]], label [[TMP15:%.*]], label [[TMP16:%.*]], !prof [[PROF1]]
93105d0a12d3SThurston Dang; CHECK:       15:
93115d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
93125d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
93135d0a12d3SThurston Dang; CHECK:       16:
93145d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i32> @llvm.aarch64.neon.vsli.v4i32(<4 x i32> [[TMP1]], <4 x i32> [[TMP2]], i32 1)
93155d0a12d3SThurston Dang; CHECK-NEXT:    store <4 x i32> zeroinitializer, ptr @__msan_retval_tls, align 8
93165d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[TMP3]]
93175d0a12d3SThurston Dang;
93185d0a12d3SThurston Dang  %tmp1 = load <4 x i32>, ptr %A
93195d0a12d3SThurston Dang  %tmp2 = load <4 x i32>, ptr %B
93205d0a12d3SThurston Dang  %tmp3 = call <4 x i32> @llvm.aarch64.neon.vsli.v4i32(<4 x i32> %tmp1, <4 x i32> %tmp2, i32 1)
93215d0a12d3SThurston Dang  ret <4 x i32> %tmp3
93225d0a12d3SThurston Dang}
93235d0a12d3SThurston Dang
93245d0a12d3SThurston Dangdefine <2 x i64> @sli2d(ptr %A, ptr %B) nounwind sanitize_memory {
93255d0a12d3SThurston Dang; CHECK-LABEL: define <2 x i64> @sli2d(
93265d0a12d3SThurston Dang; CHECK-SAME: ptr [[A:%.*]], ptr [[B:%.*]]) #[[ATTR0]] {
93275d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 8
93285d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
93295d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
93305d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0
9331*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]
93325d0a12d3SThurston Dang; CHECK:       3:
93335d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
93345d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
93355d0a12d3SThurston Dang; CHECK:       4:
93365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr [[A]], align 16
93375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64
93385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
93395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
93405d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD:%.*]] = load <2 x i64>, ptr [[TMP7]], align 16
93415d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP2:%.*]] = icmp ne i64 [[TMP2]], 0
9342*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP2]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
93435d0a12d3SThurston Dang; CHECK:       8:
93445d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
93455d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
93465d0a12d3SThurston Dang; CHECK:       9:
93475d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr [[B]], align 16
93485d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP10:%.*]] = ptrtoint ptr [[B]] to i64
93495d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP11:%.*]] = xor i64 [[TMP10]], 193514046488576
93505d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP12:%.*]] = inttoptr i64 [[TMP11]] to ptr
93515d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSLD1:%.*]] = load <2 x i64>, ptr [[TMP12]], align 16
93525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP13:%.*]] = bitcast <2 x i64> [[_MSLD]] to i128
93535d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP3:%.*]] = icmp ne i128 [[TMP13]], 0
93545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <2 x i64> [[_MSLD1]] to i128
93555d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP4:%.*]] = icmp ne i128 [[TMP14]], 0
93565d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSOR:%.*]] = or i1 [[_MSCMP3]], [[_MSCMP4]]
9357*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSOR]], label [[TMP15:%.*]], label [[TMP16:%.*]], !prof [[PROF1]]
93585d0a12d3SThurston Dang; CHECK:       15:
93595d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
93605d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
93615d0a12d3SThurston Dang; CHECK:       16:
93625d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.vsli.v2i64(<2 x i64> [[TMP1]], <2 x i64> [[TMP2]], i32 1)
93635d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> zeroinitializer, ptr @__msan_retval_tls, align 8
93645d0a12d3SThurston Dang; CHECK-NEXT:    ret <2 x i64> [[TMP3]]
93655d0a12d3SThurston Dang;
93665d0a12d3SThurston Dang  %tmp1 = load <2 x i64>, ptr %A
93675d0a12d3SThurston Dang  %tmp2 = load <2 x i64>, ptr %B
93685d0a12d3SThurston Dang  %tmp3 = call <2 x i64> @llvm.aarch64.neon.vsli.v2i64(<2 x i64> %tmp1, <2 x i64> %tmp2, i32 1)
93695d0a12d3SThurston Dang  ret <2 x i64> %tmp3
93705d0a12d3SThurston Dang}
93715d0a12d3SThurston Dang
93725d0a12d3SThurston Dangdeclare <8 x i8>  @llvm.aarch64.neon.vsli.v8i8(<8 x i8>, <8 x i8>, i32) nounwind readnone
93735d0a12d3SThurston Dangdeclare <4 x i16> @llvm.aarch64.neon.vsli.v4i16(<4 x i16>, <4 x i16>, i32) nounwind readnone
93745d0a12d3SThurston Dangdeclare <2 x i32> @llvm.aarch64.neon.vsli.v2i32(<2 x i32>, <2 x i32>, i32) nounwind readnone
93755d0a12d3SThurston Dangdeclare <1 x i64> @llvm.aarch64.neon.vsli.v1i64(<1 x i64>, <1 x i64>, i32) nounwind readnone
93765d0a12d3SThurston Dang
93775d0a12d3SThurston Dangdeclare <16 x i8> @llvm.aarch64.neon.vsli.v16i8(<16 x i8>, <16 x i8>, i32) nounwind readnone
93785d0a12d3SThurston Dangdeclare <8 x i16> @llvm.aarch64.neon.vsli.v8i16(<8 x i16>, <8 x i16>, i32) nounwind readnone
93795d0a12d3SThurston Dangdeclare <4 x i32> @llvm.aarch64.neon.vsli.v4i32(<4 x i32>, <4 x i32>, i32) nounwind readnone
93805d0a12d3SThurston Dangdeclare <2 x i64> @llvm.aarch64.neon.vsli.v2i64(<2 x i64>, <2 x i64>, i32) nounwind readnone
93815d0a12d3SThurston Dang
93825d0a12d3SThurston Dangdefine <1 x i64> @ashr_v1i64(<1 x i64> %a, <1 x i64> %b) sanitize_memory {
93835d0a12d3SThurston Dang; CHECK-LABEL: define <1 x i64> @ashr_v1i64(
93845d0a12d3SThurston Dang; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]]) #[[ATTR3]] {
93855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8
93865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
93875d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
93885d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = icmp ne <1 x i64> [[TMP2]], zeroinitializer
93895d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP4:%.*]] = sext <1 x i1> [[TMP3]] to <1 x i64>
93905d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ashr <1 x i64> [[TMP1]], [[B]]
93915d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = or <1 x i64> [[TMP5]], [[TMP4]]
93925d0a12d3SThurston Dang; CHECK-NEXT:    [[C:%.*]] = ashr <1 x i64> [[A]], [[B]]
93935d0a12d3SThurston Dang; CHECK-NEXT:    store <1 x i64> [[TMP6]], ptr @__msan_retval_tls, align 8
93945d0a12d3SThurston Dang; CHECK-NEXT:    ret <1 x i64> [[C]]
93955d0a12d3SThurston Dang;
93965d0a12d3SThurston Dang  %c = ashr <1 x i64> %a, %b
93975d0a12d3SThurston Dang  ret <1 x i64> %c
93985d0a12d3SThurston Dang}
93995d0a12d3SThurston Dang
94005d0a12d3SThurston Dangdefine void @sqshl_zero_shift_amount(<2 x i64> %a, <2 x i64> %b, ptr %dst) sanitize_memory {
94015d0a12d3SThurston Dang; CHECK-LABEL: define void @sqshl_zero_shift_amount(
94025d0a12d3SThurston Dang; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], ptr [[DST:%.*]]) #[[ATTR3]] {
94035d0a12d3SThurston Dang; CHECK-NEXT:  entry:
94045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
94055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
94065d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 32) to ptr), align 8
94075d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
94085d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP0]], [[TMP1]]
94095d0a12d3SThurston Dang; CHECK-NEXT:    [[VPADDQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> [[A]], <2 x i64> [[B]])
94104ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64> [[_MSPROP]], <2 x i64> zeroinitializer)
94114ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <2 x i64> [[TMP3]], zeroinitializer
94125d0a12d3SThurston Dang; CHECK-NEXT:    [[VSHLQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64> [[VPADDQ_V2_I_I]], <2 x i64> zeroinitializer)
94135d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0
9414*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
94154ce559d0SThurston Dang; CHECK:       5:
94165d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
94175d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
94184ce559d0SThurston Dang; CHECK:       6:
94195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[DST]] to i64
94205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
94215d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
94225d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr [[TMP7]], align 8
94235d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[VSHLQ_V2_I_I]], ptr [[DST]], align 8
94245d0a12d3SThurston Dang; CHECK-NEXT:    ret void
94255d0a12d3SThurston Dang;
94265d0a12d3SThurston Dangentry:
94275d0a12d3SThurston Dang  %vpaddq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> %a, <2 x i64> %b)
94285d0a12d3SThurston Dang  %vshlq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.sqshl.v2i64(<2 x i64> %vpaddq_v2.i.i, <2 x i64> zeroinitializer)
94295d0a12d3SThurston Dang  store <2 x i64> %vshlq_v2.i.i, ptr %dst, align 8
94305d0a12d3SThurston Dang  ret void
94315d0a12d3SThurston Dang}
94325d0a12d3SThurston Dang
94335d0a12d3SThurston Dangdefine void @uqshl_zero_shift_amount(<2 x i64> %a, <2 x i64> %b, ptr %dst) sanitize_memory {
94345d0a12d3SThurston Dang; CHECK-LABEL: define void @uqshl_zero_shift_amount(
94355d0a12d3SThurston Dang; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], ptr [[DST:%.*]]) #[[ATTR3]] {
94365d0a12d3SThurston Dang; CHECK-NEXT:  entry:
94375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
94385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
94395d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 32) to ptr), align 8
94405d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
94415d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP0]], [[TMP1]]
94425d0a12d3SThurston Dang; CHECK-NEXT:    [[VPADDQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> [[A]], <2 x i64> [[B]])
94434ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64> [[_MSPROP]], <2 x i64> zeroinitializer)
94444ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <2 x i64> [[TMP3]], zeroinitializer
94455d0a12d3SThurston Dang; CHECK-NEXT:    [[VSHLQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64> [[VPADDQ_V2_I_I]], <2 x i64> zeroinitializer)
94465d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0
9447*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
94484ce559d0SThurston Dang; CHECK:       5:
94495d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
94505d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
94514ce559d0SThurston Dang; CHECK:       6:
94525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[DST]] to i64
94535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
94545d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
94555d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr [[TMP7]], align 8
94565d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[VSHLQ_V2_I_I]], ptr [[DST]], align 8
94575d0a12d3SThurston Dang; CHECK-NEXT:    ret void
94585d0a12d3SThurston Dang;
94595d0a12d3SThurston Dangentry:
94605d0a12d3SThurston Dang  %vpaddq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> %a, <2 x i64> %b)
94615d0a12d3SThurston Dang  %vshlq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.uqshl.v2i64(<2 x i64> %vpaddq_v2.i.i, <2 x i64> zeroinitializer)
94625d0a12d3SThurston Dang  store <2 x i64> %vshlq_v2.i.i, ptr %dst, align 8
94635d0a12d3SThurston Dang  ret void
94645d0a12d3SThurston Dang}
94655d0a12d3SThurston Dang
94665d0a12d3SThurston Dangdefine void @srshl_zero_shift_amount(<2 x i64> %a, <2 x i64> %b, ptr %dst) sanitize_memory {
94675d0a12d3SThurston Dang; CHECK-LABEL: define void @srshl_zero_shift_amount(
94685d0a12d3SThurston Dang; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], ptr [[DST:%.*]]) #[[ATTR3]] {
94695d0a12d3SThurston Dang; CHECK-NEXT:  entry:
94705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
94715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
94725d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 32) to ptr), align 8
94735d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
94745d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP0]], [[TMP1]]
94755d0a12d3SThurston Dang; CHECK-NEXT:    [[VPADDQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> [[A]], <2 x i64> [[B]])
94764ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> [[_MSPROP]], <2 x i64> zeroinitializer)
94774ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <2 x i64> [[TMP3]], zeroinitializer
94785d0a12d3SThurston Dang; CHECK-NEXT:    [[VSHLQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> [[VPADDQ_V2_I_I]], <2 x i64> zeroinitializer)
94795d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0
9480*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
94814ce559d0SThurston Dang; CHECK:       5:
94825d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
94835d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
94844ce559d0SThurston Dang; CHECK:       6:
94855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[DST]] to i64
94865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
94875d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
94885d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr [[TMP7]], align 8
94895d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[VSHLQ_V2_I_I]], ptr [[DST]], align 8
94905d0a12d3SThurston Dang; CHECK-NEXT:    ret void
94915d0a12d3SThurston Dang;
94925d0a12d3SThurston Dangentry:
94935d0a12d3SThurston Dang  %vpaddq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> %a, <2 x i64> %b)
94945d0a12d3SThurston Dang  %vshlq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.srshl.v2i64(<2 x i64> %vpaddq_v2.i.i, <2 x i64> zeroinitializer)
94955d0a12d3SThurston Dang  store <2 x i64> %vshlq_v2.i.i, ptr %dst, align 8
94965d0a12d3SThurston Dang  ret void
94975d0a12d3SThurston Dang}
94985d0a12d3SThurston Dang
94995d0a12d3SThurston Dangdefine void @urshl_zero_shift_amount(<2 x i64> %a, <2 x i64> %b, ptr %dst) sanitize_memory {
95005d0a12d3SThurston Dang; CHECK-LABEL: define void @urshl_zero_shift_amount(
95015d0a12d3SThurston Dang; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], ptr [[DST:%.*]]) #[[ATTR3]] {
95025d0a12d3SThurston Dang; CHECK-NEXT:  entry:
95035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
95045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
95055d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 32) to ptr), align 8
95065d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
95075d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP0]], [[TMP1]]
95085d0a12d3SThurston Dang; CHECK-NEXT:    [[VPADDQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> [[A]], <2 x i64> [[B]])
95094ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> [[_MSPROP]], <2 x i64> zeroinitializer)
95104ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <2 x i64> [[TMP3]], zeroinitializer
95115d0a12d3SThurston Dang; CHECK-NEXT:    [[VSHLQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> [[VPADDQ_V2_I_I]], <2 x i64> zeroinitializer)
95125d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0
9513*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
95144ce559d0SThurston Dang; CHECK:       5:
95155d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
95165d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
95174ce559d0SThurston Dang; CHECK:       6:
95185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[DST]] to i64
95195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
95205d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
95215d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr [[TMP7]], align 8
95225d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[VSHLQ_V2_I_I]], ptr [[DST]], align 8
95235d0a12d3SThurston Dang; CHECK-NEXT:    ret void
95245d0a12d3SThurston Dang;
95255d0a12d3SThurston Dangentry:
95265d0a12d3SThurston Dang  %vpaddq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> %a, <2 x i64> %b)
95275d0a12d3SThurston Dang  %vshlq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.urshl.v2i64(<2 x i64> %vpaddq_v2.i.i, <2 x i64> zeroinitializer)
95285d0a12d3SThurston Dang  store <2 x i64> %vshlq_v2.i.i, ptr %dst, align 8
95295d0a12d3SThurston Dang  ret void
95305d0a12d3SThurston Dang}
95315d0a12d3SThurston Dang
95325d0a12d3SThurston Dangdefine void @sqshlu_zero_shift_amount(<2 x i64> %a, <2 x i64> %b, ptr %dst) sanitize_memory {
95335d0a12d3SThurston Dang; CHECK-LABEL: define void @sqshlu_zero_shift_amount(
95345d0a12d3SThurston Dang; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], ptr [[DST:%.*]]) #[[ATTR3]] {
95355d0a12d3SThurston Dang; CHECK-NEXT:  entry:
95365d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
95375d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
95385d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 32) to ptr), align 8
95395d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
95405d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP0]], [[TMP1]]
95415d0a12d3SThurston Dang; CHECK-NEXT:    [[VPADDQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> [[A]], <2 x i64> [[B]])
95424ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> [[_MSPROP]], <2 x i64> zeroinitializer)
95434ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <2 x i64> [[TMP3]], zeroinitializer
95445d0a12d3SThurston Dang; CHECK-NEXT:    [[VSHLQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> [[VPADDQ_V2_I_I]], <2 x i64> zeroinitializer)
95455d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0
9546*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
95474ce559d0SThurston Dang; CHECK:       5:
95485d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
95495d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
95504ce559d0SThurston Dang; CHECK:       6:
95515d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[DST]] to i64
95525d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
95535d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
95545d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr [[TMP7]], align 8
95555d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[VSHLQ_V2_I_I]], ptr [[DST]], align 8
95565d0a12d3SThurston Dang; CHECK-NEXT:    ret void
95575d0a12d3SThurston Dang;
95585d0a12d3SThurston Dangentry:
95595d0a12d3SThurston Dang  %vpaddq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> %a, <2 x i64> %b)
95605d0a12d3SThurston Dang  %vshlq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> %vpaddq_v2.i.i, <2 x i64> zeroinitializer)
95615d0a12d3SThurston Dang  store <2 x i64> %vshlq_v2.i.i, ptr %dst, align 8
95625d0a12d3SThurston Dang  ret void
95635d0a12d3SThurston Dang}
95645d0a12d3SThurston Dang
95655d0a12d3SThurston Dangdefine void @sshl_zero_shift_amount(<2 x i64> %a, <2 x i64> %b, ptr %dst) sanitize_memory {
95665d0a12d3SThurston Dang; CHECK-LABEL: define void @sshl_zero_shift_amount(
95675d0a12d3SThurston Dang; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], ptr [[DST:%.*]]) #[[ATTR3]] {
95685d0a12d3SThurston Dang; CHECK-NEXT:  entry:
95695d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
95705d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
95715d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 32) to ptr), align 8
95725d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
95735d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP0]], [[TMP1]]
95745d0a12d3SThurston Dang; CHECK-NEXT:    [[VPADDQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> [[A]], <2 x i64> [[B]])
95754ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> [[_MSPROP]], <2 x i64> zeroinitializer)
95764ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <2 x i64> [[TMP3]], zeroinitializer
95775d0a12d3SThurston Dang; CHECK-NEXT:    [[VSHLQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> [[VPADDQ_V2_I_I]], <2 x i64> zeroinitializer)
95785d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0
9579*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
95804ce559d0SThurston Dang; CHECK:       5:
95815d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
95825d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
95834ce559d0SThurston Dang; CHECK:       6:
95845d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[DST]] to i64
95855d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
95865d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
95875d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr [[TMP7]], align 8
95885d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[VSHLQ_V2_I_I]], ptr [[DST]], align 8
95895d0a12d3SThurston Dang; CHECK-NEXT:    ret void
95905d0a12d3SThurston Dang;
95915d0a12d3SThurston Dangentry:
95925d0a12d3SThurston Dang  %vpaddq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> %a, <2 x i64> %b)
95935d0a12d3SThurston Dang  %vshlq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.sshl.v2i64(<2 x i64> %vpaddq_v2.i.i, <2 x i64> zeroinitializer)
95945d0a12d3SThurston Dang  store <2 x i64> %vshlq_v2.i.i, ptr %dst, align 8
95955d0a12d3SThurston Dang  ret void
95965d0a12d3SThurston Dang}
95975d0a12d3SThurston Dang
95985d0a12d3SThurston Dangdefine void @ushl_zero_shift_amount(<2 x i64> %a, <2 x i64> %b, ptr %dst) sanitize_memory {
95995d0a12d3SThurston Dang; CHECK-LABEL: define void @ushl_zero_shift_amount(
96005d0a12d3SThurston Dang; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], ptr [[DST:%.*]]) #[[ATTR3]] {
96015d0a12d3SThurston Dang; CHECK-NEXT:  entry:
96025d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8
96035d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 16) to ptr), align 8
96045d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 32) to ptr), align 8
96055d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
96065d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <2 x i64> [[TMP0]], [[TMP1]]
96075d0a12d3SThurston Dang; CHECK-NEXT:    [[VPADDQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> [[A]], <2 x i64> [[B]])
96084ce559d0SThurston Dang; CHECK-NEXT:    [[TMP3:%.*]] = call <2 x i64> @llvm.aarch64.neon.ushl.v2i64(<2 x i64> [[_MSPROP]], <2 x i64> zeroinitializer)
96094ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP1:%.*]] = or <2 x i64> [[TMP3]], zeroinitializer
96105d0a12d3SThurston Dang; CHECK-NEXT:    [[VSHLQ_V2_I_I:%.*]] = tail call <2 x i64> @llvm.aarch64.neon.ushl.v2i64(<2 x i64> [[VPADDQ_V2_I_I]], <2 x i64> zeroinitializer)
96115d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0
9612*38fffa63SPaul Walker; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]
96134ce559d0SThurston Dang; CHECK:       5:
96145d0a12d3SThurston Dang; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR5]]
96155d0a12d3SThurston Dang; CHECK-NEXT:    unreachable
96164ce559d0SThurston Dang; CHECK:       6:
96175d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[DST]] to i64
96185d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576
96195d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr
96205d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr [[TMP7]], align 8
96215d0a12d3SThurston Dang; CHECK-NEXT:    store <2 x i64> [[VSHLQ_V2_I_I]], ptr [[DST]], align 8
96225d0a12d3SThurston Dang; CHECK-NEXT:    ret void
96235d0a12d3SThurston Dang;
96245d0a12d3SThurston Dangentry:
96255d0a12d3SThurston Dang  %vpaddq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64> %a, <2 x i64> %b)
96265d0a12d3SThurston Dang  %vshlq_v2.i.i = tail call <2 x i64> @llvm.aarch64.neon.ushl.v2i64(<2 x i64> %vpaddq_v2.i.i, <2 x i64> zeroinitializer)
96275d0a12d3SThurston Dang  store <2 x i64> %vshlq_v2.i.i, ptr %dst, align 8
96285d0a12d3SThurston Dang  ret void
96295d0a12d3SThurston Dang}
96305d0a12d3SThurston Dang
96315d0a12d3SThurston Dangdefine <4 x i32> @sext_rshrn(<4 x i32> noundef %a) sanitize_memory {
96325d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @sext_rshrn(
96335d0a12d3SThurston Dang; CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR3]] {
96345d0a12d3SThurston Dang; CHECK-NEXT:  entry:
96355d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8
96365d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
96374ce559d0SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> [[TMP0]], i32 13)
96384ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = or <4 x i16> [[TMP1]], zeroinitializer
96395d0a12d3SThurston Dang; CHECK-NEXT:    [[VRSHRN_N1:%.*]] = tail call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> [[A]], i32 13)
96404ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = sext <4 x i16> [[TMP2]] to <4 x i32>
96415d0a12d3SThurston Dang; CHECK-NEXT:    [[VMOVL_I:%.*]] = sext <4 x i16> [[VRSHRN_N1]] to <4 x i32>
96424ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
96435d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[VMOVL_I]]
96445d0a12d3SThurston Dang;
96455d0a12d3SThurston Dangentry:
96465d0a12d3SThurston Dang  %vrshrn_n1 = tail call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> %a, i32 13)
96475d0a12d3SThurston Dang  %vmovl.i = sext <4 x i16> %vrshrn_n1 to <4 x i32>
96485d0a12d3SThurston Dang  ret <4 x i32> %vmovl.i
96495d0a12d3SThurston Dang}
96505d0a12d3SThurston Dang
96515d0a12d3SThurston Dangdefine <4 x i32> @zext_rshrn(<4 x i32> noundef %a) sanitize_memory {
96525d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i32> @zext_rshrn(
96535d0a12d3SThurston Dang; CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR3]] {
96545d0a12d3SThurston Dang; CHECK-NEXT:  entry:
96555d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8
96565d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
96574ce559d0SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> [[TMP0]], i32 13)
96584ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = or <4 x i16> [[TMP1]], zeroinitializer
96595d0a12d3SThurston Dang; CHECK-NEXT:    [[VRSHRN_N1:%.*]] = tail call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> [[A]], i32 13)
96604ce559d0SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = zext <4 x i16> [[TMP2]] to <4 x i32>
96615d0a12d3SThurston Dang; CHECK-NEXT:    [[VMOVL_I:%.*]] = zext <4 x i16> [[VRSHRN_N1]] to <4 x i32>
96624ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 8
96635d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i32> [[VMOVL_I]]
96645d0a12d3SThurston Dang;
96655d0a12d3SThurston Dangentry:
96665d0a12d3SThurston Dang  %vrshrn_n1 = tail call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> %a, i32 13)
96675d0a12d3SThurston Dang  %vmovl.i = zext <4 x i16> %vrshrn_n1 to <4 x i32>
96685d0a12d3SThurston Dang  ret <4 x i32> %vmovl.i
96695d0a12d3SThurston Dang}
96705d0a12d3SThurston Dang
96715d0a12d3SThurston Dangdefine <4 x i16> @mul_rshrn(<4 x i32> noundef %a) sanitize_memory {
96725d0a12d3SThurston Dang; CHECK-LABEL: define <4 x i16> @mul_rshrn(
96735d0a12d3SThurston Dang; CHECK-SAME: <4 x i32> noundef [[A:%.*]]) #[[ATTR3]] {
96745d0a12d3SThurston Dang; CHECK-NEXT:  entry:
96755d0a12d3SThurston Dang; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8
96765d0a12d3SThurston Dang; CHECK-NEXT:    call void @llvm.donothing()
96775d0a12d3SThurston Dang; CHECK-NEXT:    [[_MSPROP:%.*]] = or <4 x i32> [[TMP0]], zeroinitializer
9678*38fffa63SPaul Walker; CHECK-NEXT:    [[B:%.*]] = add <4 x i32> [[A]], splat (i32 3)
96794ce559d0SThurston Dang; CHECK-NEXT:    [[TMP1:%.*]] = call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> [[_MSPROP]], i32 13)
96804ce559d0SThurston Dang; CHECK-NEXT:    [[TMP2:%.*]] = or <4 x i16> [[TMP1]], zeroinitializer
96815d0a12d3SThurston Dang; CHECK-NEXT:    [[VRSHRN_N1:%.*]] = tail call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> [[B]], i32 13)
96824ce559d0SThurston Dang; CHECK-NEXT:    store <4 x i16> [[TMP2]], ptr @__msan_retval_tls, align 8
96835d0a12d3SThurston Dang; CHECK-NEXT:    ret <4 x i16> [[VRSHRN_N1]]
96845d0a12d3SThurston Dang;
96855d0a12d3SThurston Dangentry:
96865d0a12d3SThurston Dang  %b = add <4 x i32> %a, <i32 3, i32 3, i32 3, i32 3>
96875d0a12d3SThurston Dang  %vrshrn_n1 = tail call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> %b, i32 13)
96885d0a12d3SThurston Dang  ret <4 x i16> %vrshrn_n1
96895d0a12d3SThurston Dang}
96905d0a12d3SThurston Dang
96915d0a12d3SThurston Dangdeclare <2 x i64> @llvm.aarch64.neon.addp.v2i64(<2 x i64>, <2 x i64>)
96925d0a12d3SThurston Dang;.
9693*38fffa63SPaul Walker; CHECK: [[PROF1]] = !{!"branch_weights", i32 1, i32 1048575}
96945d0a12d3SThurston Dang;.
9695