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