1389 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42;3; Test memory sanitizer instrumentation for Arm NEON VST_{2,3,4} and4; VST_1x{2,3,4} instructions, including floating-point parameters.5;6; RUN: opt < %s -passes=msan -S | FileCheck %s7;8; Generated with:9; grep call clang/test/CodeGen/aarch64-neon-intrinsics.c \10; | grep 'neon[.]st' \11; | sed -r 's/^\/\/ CHECK[:][ ]*//' \12; | cut -d ' ' -f 1 --complement \13; | sed -r 's/[[][[]TMP[0-9]+[]][]]/%A/' \14; | sed -r 's/[[][[]TMP[0-9]+[]][]]/%B/' \15; | sed -r 's/[[][[]TMP[0-9]+[]][]]/%C/' \16; | sed -r 's/[[][[]TMP[0-9]+[]][]]/%D/' \17; | sort \18; | uniq \19; | while read x; \20; do \21; y=`echo "$x" \22; | sed -r 's/@llvm[.]aarch64[.]neon[.]/@/' \23; | sed -r 's/[.]p0//' \24; | tr '.' '_'`; \25; echo "define $y sanitize_memory {"; \26; echo " call $x"; \27; echo " ret void"; \28; echo "}"; \29; echo; \30; done31 32target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"33target triple = "aarch64--linux-android9001"34 35; -----------------------------------------------------------------------------------------------------------------------------------------------36 37define void @st1x2_v1f64(<1 x double> %A, <1 x double> %B, ptr %p) sanitize_memory {38; CHECK-LABEL: define void @st1x2_v1f64(39; CHECK-SAME: <1 x double> [[A:%.*]], <1 x double> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0:[0-9]+]] {40; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 841; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 842; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 843; CHECK-NEXT: call void @llvm.donothing()44; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i6445; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 19351404648857646; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr47; CHECK-NEXT: call void @llvm.aarch64.neon.st1x2.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], ptr [[TMP6]])48; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 049; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1:![0-9]+]]50; CHECK: 7:51; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4:[0-9]+]]52; CHECK-NEXT: unreachable53; CHECK: 8:54; CHECK-NEXT: call void @llvm.aarch64.neon.st1x2.v1f64.p0(<1 x double> [[A]], <1 x double> [[B]], ptr [[P]])55; CHECK-NEXT: ret void56;57 call void @llvm.aarch64.neon.st1x2.v1f64.p0(<1 x double> %A, <1 x double> %B, ptr %p)58 ret void59}60 61define void @st1x2_v1i64(<1 x i64> %A, <1 x i64> %B, ptr %p) sanitize_memory {62; CHECK-LABEL: define void @st1x2_v1i64(63; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {64; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 865; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 866; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 867; CHECK-NEXT: call void @llvm.donothing()68; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i6469; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 19351404648857670; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr71; CHECK-NEXT: call void @llvm.aarch64.neon.st1x2.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], ptr [[TMP6]])72; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 073; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]74; CHECK: 7:75; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]76; CHECK-NEXT: unreachable77; CHECK: 8:78; CHECK-NEXT: call void @llvm.aarch64.neon.st1x2.v1i64.p0(<1 x i64> [[A]], <1 x i64> [[B]], ptr [[P]])79; CHECK-NEXT: ret void80;81 call void @llvm.aarch64.neon.st1x2.v1i64.p0(<1 x i64> %A, <1 x i64> %B, ptr %p)82 ret void83}84 85define void @st1x2_v2f64(<2 x double> %A, <2 x double> %B, ptr %p) sanitize_memory {86; CHECK-LABEL: define void @st1x2_v2f64(87; CHECK-SAME: <2 x double> [[A:%.*]], <2 x double> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {88; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 889; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 890; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 891; CHECK-NEXT: call void @llvm.donothing()92; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i6493; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 19351404648857694; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr95; CHECK-NEXT: call void @llvm.aarch64.neon.st1x2.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], ptr [[TMP6]])96; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 097; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]98; CHECK: 7:99; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]100; CHECK-NEXT: unreachable101; CHECK: 8:102; CHECK-NEXT: call void @llvm.aarch64.neon.st1x2.v2f64.p0(<2 x double> [[A]], <2 x double> [[B]], ptr [[P]])103; CHECK-NEXT: ret void104;105 call void @llvm.aarch64.neon.st1x2.v2f64.p0(<2 x double> %A, <2 x double> %B, ptr %p)106 ret void107}108 109define void @st1x2_v2i64(<2 x i64> %A, <2 x i64> %B, ptr %p) sanitize_memory {110; CHECK-LABEL: define void @st1x2_v2i64(111; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {112; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8113; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8114; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8115; CHECK-NEXT: call void @llvm.donothing()116; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64117; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576118; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr119; CHECK-NEXT: call void @llvm.aarch64.neon.st1x2.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], ptr [[TMP6]])120; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0121; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]122; CHECK: 7:123; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]124; CHECK-NEXT: unreachable125; CHECK: 8:126; CHECK-NEXT: call void @llvm.aarch64.neon.st1x2.v2i64.p0(<2 x i64> [[A]], <2 x i64> [[B]], ptr [[P]])127; CHECK-NEXT: ret void128;129 call void @llvm.aarch64.neon.st1x2.v2i64.p0(<2 x i64> %A, <2 x i64> %B, ptr %p)130 ret void131}132 133define void @st1x3_v1f64(<1 x double> %A, <1 x double> %B, <1 x double> %C, ptr %p) sanitize_memory {134; CHECK-LABEL: define void @st1x3_v1f64(135; CHECK-SAME: <1 x double> [[A:%.*]], <1 x double> [[B:%.*]], <1 x double> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {136; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8137; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8138; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8139; CHECK-NEXT: [[TMP4:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8140; CHECK-NEXT: call void @llvm.donothing()141; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64142; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576143; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr144; CHECK-NEXT: call void @llvm.aarch64.neon.st1x3.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], <1 x i64> [[TMP4]], ptr [[TMP7]])145; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0146; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]147; CHECK: 8:148; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]149; CHECK-NEXT: unreachable150; CHECK: 9:151; CHECK-NEXT: call void @llvm.aarch64.neon.st1x3.v1f64.p0(<1 x double> [[A]], <1 x double> [[B]], <1 x double> [[C]], ptr [[P]])152; CHECK-NEXT: ret void153;154 call void @llvm.aarch64.neon.st1x3.v1f64.p0(<1 x double> %A, <1 x double> %B, <1 x double> %C, ptr %p)155 ret void156}157 158define void @st1x3_v1i64(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, ptr %p) sanitize_memory {159; CHECK-LABEL: define void @st1x3_v1i64(160; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]], <1 x i64> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {161; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8162; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8163; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8164; CHECK-NEXT: [[TMP4:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8165; CHECK-NEXT: call void @llvm.donothing()166; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64167; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576168; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr169; CHECK-NEXT: call void @llvm.aarch64.neon.st1x3.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], <1 x i64> [[TMP4]], ptr [[TMP7]])170; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0171; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]172; CHECK: 8:173; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]174; CHECK-NEXT: unreachable175; CHECK: 9:176; CHECK-NEXT: call void @llvm.aarch64.neon.st1x3.v1i64.p0(<1 x i64> [[A]], <1 x i64> [[B]], <1 x i64> [[C]], ptr [[P]])177; CHECK-NEXT: ret void178;179 call void @llvm.aarch64.neon.st1x3.v1i64.p0(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, ptr %p)180 ret void181}182 183define void @st1x3_v2f64(<2 x double> %A, <2 x double> %B, <2 x double> %C, ptr %p) sanitize_memory {184; CHECK-LABEL: define void @st1x3_v2f64(185; CHECK-SAME: <2 x double> [[A:%.*]], <2 x double> [[B:%.*]], <2 x double> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {186; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8187; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8188; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8189; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8190; CHECK-NEXT: call void @llvm.donothing()191; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64192; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576193; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr194; CHECK-NEXT: call void @llvm.aarch64.neon.st1x3.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], <2 x i64> [[TMP4]], ptr [[TMP7]])195; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0196; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]197; CHECK: 8:198; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]199; CHECK-NEXT: unreachable200; CHECK: 9:201; CHECK-NEXT: call void @llvm.aarch64.neon.st1x3.v2f64.p0(<2 x double> [[A]], <2 x double> [[B]], <2 x double> [[C]], ptr [[P]])202; CHECK-NEXT: ret void203;204 call void @llvm.aarch64.neon.st1x3.v2f64.p0(<2 x double> %A, <2 x double> %B, <2 x double> %C, ptr %p)205 ret void206}207 208define void @st1x3_v2i64(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, ptr %p) sanitize_memory {209; CHECK-LABEL: define void @st1x3_v2i64(210; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], <2 x i64> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {211; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8212; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8213; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8214; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8215; CHECK-NEXT: call void @llvm.donothing()216; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64217; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576218; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr219; CHECK-NEXT: call void @llvm.aarch64.neon.st1x3.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], <2 x i64> [[TMP4]], ptr [[TMP7]])220; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0221; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]222; CHECK: 8:223; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]224; CHECK-NEXT: unreachable225; CHECK: 9:226; CHECK-NEXT: call void @llvm.aarch64.neon.st1x3.v2i64.p0(<2 x i64> [[A]], <2 x i64> [[B]], <2 x i64> [[C]], ptr [[P]])227; CHECK-NEXT: ret void228;229 call void @llvm.aarch64.neon.st1x3.v2i64.p0(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, ptr %p)230 ret void231}232 233define void @st1x4_v1f64(<1 x double> %A, <1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %p) sanitize_memory {234; CHECK-LABEL: define void @st1x4_v1f64(235; CHECK-SAME: <1 x double> [[A:%.*]], <1 x double> [[B:%.*]], <1 x double> [[C:%.*]], <1 x double> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {236; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8237; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8238; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8239; CHECK-NEXT: [[TMP4:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8240; CHECK-NEXT: [[TMP5:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8241; CHECK-NEXT: call void @llvm.donothing()242; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i64243; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576244; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr245; CHECK-NEXT: call void @llvm.aarch64.neon.st1x4.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], <1 x i64> [[TMP4]], <1 x i64> [[TMP5]], ptr [[TMP8]])246; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0247; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]248; CHECK: 9:249; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]250; CHECK-NEXT: unreachable251; CHECK: 10:252; CHECK-NEXT: call void @llvm.aarch64.neon.st1x4.v1f64.p0(<1 x double> [[A]], <1 x double> [[B]], <1 x double> [[C]], <1 x double> [[D]], ptr [[P]])253; CHECK-NEXT: ret void254;255 call void @llvm.aarch64.neon.st1x4.v1f64.p0(<1 x double> %A, <1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %p)256 ret void257}258 259define void @st1x4_v1i64(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %p) sanitize_memory {260; CHECK-LABEL: define void @st1x4_v1i64(261; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]], <1 x i64> [[C:%.*]], <1 x i64> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {262; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8263; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8264; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8265; CHECK-NEXT: [[TMP4:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8266; CHECK-NEXT: [[TMP5:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8267; CHECK-NEXT: call void @llvm.donothing()268; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i64269; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576270; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr271; CHECK-NEXT: call void @llvm.aarch64.neon.st1x4.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], <1 x i64> [[TMP4]], <1 x i64> [[TMP5]], ptr [[TMP8]])272; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0273; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]274; CHECK: 9:275; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]276; CHECK-NEXT: unreachable277; CHECK: 10:278; CHECK-NEXT: call void @llvm.aarch64.neon.st1x4.v1i64.p0(<1 x i64> [[A]], <1 x i64> [[B]], <1 x i64> [[C]], <1 x i64> [[D]], ptr [[P]])279; CHECK-NEXT: ret void280;281 call void @llvm.aarch64.neon.st1x4.v1i64.p0(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %p)282 ret void283}284 285define void @st1x4_v2f64(<2 x double> %A, <2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %p) sanitize_memory {286; CHECK-LABEL: define void @st1x4_v2f64(287; CHECK-SAME: <2 x double> [[A:%.*]], <2 x double> [[B:%.*]], <2 x double> [[C:%.*]], <2 x double> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {288; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 8289; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8290; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8291; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8292; CHECK-NEXT: [[TMP5:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8293; CHECK-NEXT: call void @llvm.donothing()294; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i64295; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576296; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr297; CHECK-NEXT: call void @llvm.aarch64.neon.st1x4.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], <2 x i64> [[TMP4]], <2 x i64> [[TMP5]], ptr [[TMP8]])298; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0299; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]300; CHECK: 9:301; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]302; CHECK-NEXT: unreachable303; CHECK: 10:304; CHECK-NEXT: call void @llvm.aarch64.neon.st1x4.v2f64.p0(<2 x double> [[A]], <2 x double> [[B]], <2 x double> [[C]], <2 x double> [[D]], ptr [[P]])305; CHECK-NEXT: ret void306;307 call void @llvm.aarch64.neon.st1x4.v2f64.p0(<2 x double> %A, <2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %p)308 ret void309}310 311define void @st1x4_v2i64(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %p) sanitize_memory {312; CHECK-LABEL: define void @st1x4_v2i64(313; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], <2 x i64> [[C:%.*]], <2 x i64> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {314; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 8315; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8316; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8317; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8318; CHECK-NEXT: [[TMP5:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8319; CHECK-NEXT: call void @llvm.donothing()320; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i64321; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576322; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr323; CHECK-NEXT: call void @llvm.aarch64.neon.st1x4.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], <2 x i64> [[TMP4]], <2 x i64> [[TMP5]], ptr [[TMP8]])324; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0325; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]326; CHECK: 9:327; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]328; CHECK-NEXT: unreachable329; CHECK: 10:330; CHECK-NEXT: call void @llvm.aarch64.neon.st1x4.v2i64.p0(<2 x i64> [[A]], <2 x i64> [[B]], <2 x i64> [[C]], <2 x i64> [[D]], ptr [[P]])331; CHECK-NEXT: ret void332;333 call void @llvm.aarch64.neon.st1x4.v2i64.p0(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %p)334 ret void335}336 337define void @st2_v16i8(<16 x i8> %A, <16 x i8> %B, ptr %p) sanitize_memory {338; CHECK-LABEL: define void @st2_v16i8(339; CHECK-SAME: <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {340; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8341; CHECK-NEXT: [[TMP2:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 8342; CHECK-NEXT: [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8343; CHECK-NEXT: call void @llvm.donothing()344; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64345; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576346; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr347; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v16i8.p0(<16 x i8> [[TMP2]], <16 x i8> [[TMP3]], ptr [[TMP6]])348; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0349; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]350; CHECK: 7:351; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]352; CHECK-NEXT: unreachable353; CHECK: 8:354; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v16i8.p0(<16 x i8> [[A]], <16 x i8> [[B]], ptr [[P]])355; CHECK-NEXT: ret void356;357 call void @llvm.aarch64.neon.st2.v16i8.p0(<16 x i8> %A, <16 x i8> %B, ptr %p)358 ret void359}360 361define void @st2_v1f64(<1 x double> %A, <1 x double> %B, ptr %p) sanitize_memory {362; CHECK-LABEL: define void @st2_v1f64(363; CHECK-SAME: <1 x double> [[A:%.*]], <1 x double> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {364; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8365; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8366; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8367; CHECK-NEXT: call void @llvm.donothing()368; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64369; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576370; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr371; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], ptr [[TMP6]])372; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0373; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]374; CHECK: 7:375; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]376; CHECK-NEXT: unreachable377; CHECK: 8:378; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v1f64.p0(<1 x double> [[A]], <1 x double> [[B]], ptr [[P]])379; CHECK-NEXT: ret void380;381 call void @llvm.aarch64.neon.st2.v1f64.p0(<1 x double> %A, <1 x double> %B, ptr %p)382 ret void383}384 385define void @st2_v1i64(<1 x i64> %A, <1 x i64> %B, ptr %p) sanitize_memory {386; CHECK-LABEL: define void @st2_v1i64(387; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {388; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8389; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8390; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8391; CHECK-NEXT: call void @llvm.donothing()392; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64393; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576394; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr395; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], ptr [[TMP6]])396; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0397; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]398; CHECK: 7:399; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]400; CHECK-NEXT: unreachable401; CHECK: 8:402; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v1i64.p0(<1 x i64> [[A]], <1 x i64> [[B]], ptr [[P]])403; CHECK-NEXT: ret void404;405 call void @llvm.aarch64.neon.st2.v1i64.p0(<1 x i64> %A, <1 x i64> %B, ptr %p)406 ret void407}408 409define void @st2_v2f32(<2 x float> %A, <2 x float> %B, ptr %p) sanitize_memory {410; CHECK-LABEL: define void @st2_v2f32(411; CHECK-SAME: <2 x float> [[A:%.*]], <2 x float> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {412; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8413; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 8414; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8415; CHECK-NEXT: call void @llvm.donothing()416; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64417; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576418; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr419; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v2i32.p0(<2 x i32> [[TMP2]], <2 x i32> [[TMP3]], ptr [[TMP6]])420; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0421; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]422; CHECK: 7:423; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]424; CHECK-NEXT: unreachable425; CHECK: 8:426; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v2f32.p0(<2 x float> [[A]], <2 x float> [[B]], ptr [[P]])427; CHECK-NEXT: ret void428;429 call void @llvm.aarch64.neon.st2.v2f32.p0(<2 x float> %A, <2 x float> %B, ptr %p)430 ret void431}432 433define void @st2_v2f64(<2 x double> %A, <2 x double> %B, ptr %p) sanitize_memory {434; CHECK-LABEL: define void @st2_v2f64(435; CHECK-SAME: <2 x double> [[A:%.*]], <2 x double> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {436; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8437; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8438; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8439; CHECK-NEXT: call void @llvm.donothing()440; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64441; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576442; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr443; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], ptr [[TMP6]])444; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0445; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]446; CHECK: 7:447; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]448; CHECK-NEXT: unreachable449; CHECK: 8:450; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v2f64.p0(<2 x double> [[A]], <2 x double> [[B]], ptr [[P]])451; CHECK-NEXT: ret void452;453 call void @llvm.aarch64.neon.st2.v2f64.p0(<2 x double> %A, <2 x double> %B, ptr %p)454 ret void455}456 457define void @st2_v2i32(<2 x i32> %A, <2 x i32> %B, ptr %p) sanitize_memory {458; CHECK-LABEL: define void @st2_v2i32(459; CHECK-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {460; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8461; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 8462; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8463; CHECK-NEXT: call void @llvm.donothing()464; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64465; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576466; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr467; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v2i32.p0(<2 x i32> [[TMP2]], <2 x i32> [[TMP3]], ptr [[TMP6]])468; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0469; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]470; CHECK: 7:471; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]472; CHECK-NEXT: unreachable473; CHECK: 8:474; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v2i32.p0(<2 x i32> [[A]], <2 x i32> [[B]], ptr [[P]])475; CHECK-NEXT: ret void476;477 call void @llvm.aarch64.neon.st2.v2i32.p0(<2 x i32> %A, <2 x i32> %B, ptr %p)478 ret void479}480 481define void @st2_v2i64(<2 x i64> %A, <2 x i64> %B, ptr %p) sanitize_memory {482; CHECK-LABEL: define void @st2_v2i64(483; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {484; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8485; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8486; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8487; CHECK-NEXT: call void @llvm.donothing()488; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64489; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576490; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr491; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], ptr [[TMP6]])492; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0493; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]494; CHECK: 7:495; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]496; CHECK-NEXT: unreachable497; CHECK: 8:498; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v2i64.p0(<2 x i64> [[A]], <2 x i64> [[B]], ptr [[P]])499; CHECK-NEXT: ret void500;501 call void @llvm.aarch64.neon.st2.v2i64.p0(<2 x i64> %A, <2 x i64> %B, ptr %p)502 ret void503}504 505define void @st2_v4f16(<4 x half> %A, <4 x half> %B, ptr %p) sanitize_memory {506; CHECK-LABEL: define void @st2_v4f16(507; CHECK-SAME: <4 x half> [[A:%.*]], <4 x half> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {508; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8509; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 8510; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8511; CHECK-NEXT: call void @llvm.donothing()512; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64513; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576514; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr515; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v4i16.p0(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]], ptr [[TMP6]])516; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0517; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]518; CHECK: 7:519; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]520; CHECK-NEXT: unreachable521; CHECK: 8:522; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v4f16.p0(<4 x half> [[A]], <4 x half> [[B]], ptr [[P]])523; CHECK-NEXT: ret void524;525 call void @llvm.aarch64.neon.st2.v4f16.p0(<4 x half> %A, <4 x half> %B, ptr %p)526 ret void527}528 529define void @st2_v4f32(<4 x float> %A, <4 x float> %B, ptr %p) sanitize_memory {530; CHECK-LABEL: define void @st2_v4f32(531; CHECK-SAME: <4 x float> [[A:%.*]], <4 x float> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {532; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8533; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8534; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8535; CHECK-NEXT: call void @llvm.donothing()536; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64537; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576538; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr539; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v4i32.p0(<4 x i32> [[TMP2]], <4 x i32> [[TMP3]], ptr [[TMP6]])540; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0541; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]542; CHECK: 7:543; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]544; CHECK-NEXT: unreachable545; CHECK: 8:546; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v4f32.p0(<4 x float> [[A]], <4 x float> [[B]], ptr [[P]])547; CHECK-NEXT: ret void548;549 call void @llvm.aarch64.neon.st2.v4f32.p0(<4 x float> %A, <4 x float> %B, ptr %p)550 ret void551}552 553define void @st2_v4i16(<4 x i16> %A, <4 x i16> %B, ptr %p) sanitize_memory {554; CHECK-LABEL: define void @st2_v4i16(555; CHECK-SAME: <4 x i16> [[A:%.*]], <4 x i16> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {556; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8557; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 8558; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8559; CHECK-NEXT: call void @llvm.donothing()560; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64561; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576562; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr563; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v4i16.p0(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]], ptr [[TMP6]])564; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0565; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]566; CHECK: 7:567; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]568; CHECK-NEXT: unreachable569; CHECK: 8:570; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v4i16.p0(<4 x i16> [[A]], <4 x i16> [[B]], ptr [[P]])571; CHECK-NEXT: ret void572;573 call void @llvm.aarch64.neon.st2.v4i16.p0(<4 x i16> %A, <4 x i16> %B, ptr %p)574 ret void575}576 577define void @st2_v4i32(<4 x i32> %A, <4 x i32> %B, ptr %p) sanitize_memory {578; CHECK-LABEL: define void @st2_v4i32(579; CHECK-SAME: <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {580; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8581; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8582; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8583; CHECK-NEXT: call void @llvm.donothing()584; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64585; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576586; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr587; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v4i32.p0(<4 x i32> [[TMP2]], <4 x i32> [[TMP3]], ptr [[TMP6]])588; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0589; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]590; CHECK: 7:591; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]592; CHECK-NEXT: unreachable593; CHECK: 8:594; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v4i32.p0(<4 x i32> [[A]], <4 x i32> [[B]], ptr [[P]])595; CHECK-NEXT: ret void596;597 call void @llvm.aarch64.neon.st2.v4i32.p0(<4 x i32> %A, <4 x i32> %B, ptr %p)598 ret void599}600 601define void @st2_v8f16(<8 x half> %A, <8 x half> %B, ptr %p) sanitize_memory {602; CHECK-LABEL: define void @st2_v8f16(603; CHECK-SAME: <8 x half> [[A:%.*]], <8 x half> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {604; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8605; CHECK-NEXT: [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8606; CHECK-NEXT: [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8607; CHECK-NEXT: call void @llvm.donothing()608; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64609; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576610; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr611; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v8i16.p0(<8 x i16> [[TMP2]], <8 x i16> [[TMP3]], ptr [[TMP6]])612; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0613; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]614; CHECK: 7:615; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]616; CHECK-NEXT: unreachable617; CHECK: 8:618; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v8f16.p0(<8 x half> [[A]], <8 x half> [[B]], ptr [[P]])619; CHECK-NEXT: ret void620;621 call void @llvm.aarch64.neon.st2.v8f16.p0(<8 x half> %A, <8 x half> %B, ptr %p)622 ret void623}624 625define void @st2_v8i16(<8 x i16> %A, <8 x i16> %B, ptr %p) sanitize_memory {626; CHECK-LABEL: define void @st2_v8i16(627; CHECK-SAME: <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {628; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8629; CHECK-NEXT: [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8630; CHECK-NEXT: [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8631; CHECK-NEXT: call void @llvm.donothing()632; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64633; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576634; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr635; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v8i16.p0(<8 x i16> [[TMP2]], <8 x i16> [[TMP3]], ptr [[TMP6]])636; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0637; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]638; CHECK: 7:639; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]640; CHECK-NEXT: unreachable641; CHECK: 8:642; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v8i16.p0(<8 x i16> [[A]], <8 x i16> [[B]], ptr [[P]])643; CHECK-NEXT: ret void644;645 call void @llvm.aarch64.neon.st2.v8i16.p0(<8 x i16> %A, <8 x i16> %B, ptr %p)646 ret void647}648 649define void @st2_v8i8(<8 x i8> %A, <8 x i8> %B, ptr %p) sanitize_memory {650; CHECK-LABEL: define void @st2_v8i8(651; CHECK-SAME: <8 x i8> [[A:%.*]], <8 x i8> [[B:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {652; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8653; CHECK-NEXT: [[TMP2:%.*]] = load <8 x i8>, ptr @__msan_param_tls, align 8654; CHECK-NEXT: [[TMP3:%.*]] = load <8 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8655; CHECK-NEXT: call void @llvm.donothing()656; CHECK-NEXT: [[TMP4:%.*]] = ptrtoint ptr [[P]] to i64657; CHECK-NEXT: [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576658; CHECK-NEXT: [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr659; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v8i8.p0(<8 x i8> [[TMP2]], <8 x i8> [[TMP3]], ptr [[TMP6]])660; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0661; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]662; CHECK: 7:663; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]664; CHECK-NEXT: unreachable665; CHECK: 8:666; CHECK-NEXT: call void @llvm.aarch64.neon.st2.v8i8.p0(<8 x i8> [[A]], <8 x i8> [[B]], ptr [[P]])667; CHECK-NEXT: ret void668;669 call void @llvm.aarch64.neon.st2.v8i8.p0(<8 x i8> %A, <8 x i8> %B, ptr %p)670 ret void671}672 673define void @st3_v16i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, ptr %p) sanitize_memory {674; CHECK-LABEL: define void @st3_v16i8(675; CHECK-SAME: <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], <16 x i8> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {676; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8677; CHECK-NEXT: [[TMP2:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 8678; CHECK-NEXT: [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8679; CHECK-NEXT: [[TMP4:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8680; CHECK-NEXT: call void @llvm.donothing()681; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64682; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576683; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr684; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v16i8.p0(<16 x i8> [[TMP2]], <16 x i8> [[TMP3]], <16 x i8> [[TMP4]], ptr [[TMP7]])685; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0686; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]687; CHECK: 8:688; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]689; CHECK-NEXT: unreachable690; CHECK: 9:691; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v16i8.p0(<16 x i8> [[A]], <16 x i8> [[B]], <16 x i8> [[C]], ptr [[P]])692; CHECK-NEXT: ret void693;694 call void @llvm.aarch64.neon.st3.v16i8.p0(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, ptr %p)695 ret void696}697 698define void @st3_v1f64(<1 x double> %A, <1 x double> %B, <1 x double> %C, ptr %p) sanitize_memory {699; CHECK-LABEL: define void @st3_v1f64(700; CHECK-SAME: <1 x double> [[A:%.*]], <1 x double> [[B:%.*]], <1 x double> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {701; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8702; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8703; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8704; CHECK-NEXT: [[TMP4:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8705; CHECK-NEXT: call void @llvm.donothing()706; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64707; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576708; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr709; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], <1 x i64> [[TMP4]], ptr [[TMP7]])710; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0711; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]712; CHECK: 8:713; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]714; CHECK-NEXT: unreachable715; CHECK: 9:716; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v1f64.p0(<1 x double> [[A]], <1 x double> [[B]], <1 x double> [[C]], ptr [[P]])717; CHECK-NEXT: ret void718;719 call void @llvm.aarch64.neon.st3.v1f64.p0(<1 x double> %A, <1 x double> %B, <1 x double> %C, ptr %p)720 ret void721}722 723define void @st3_v1i64(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, ptr %p) sanitize_memory {724; CHECK-LABEL: define void @st3_v1i64(725; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]], <1 x i64> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {726; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8727; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 8728; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8729; CHECK-NEXT: [[TMP4:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8730; CHECK-NEXT: call void @llvm.donothing()731; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64732; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576733; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr734; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], <1 x i64> [[TMP4]], ptr [[TMP7]])735; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0736; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]737; CHECK: 8:738; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]739; CHECK-NEXT: unreachable740; CHECK: 9:741; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v1i64.p0(<1 x i64> [[A]], <1 x i64> [[B]], <1 x i64> [[C]], ptr [[P]])742; CHECK-NEXT: ret void743;744 call void @llvm.aarch64.neon.st3.v1i64.p0(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, ptr %p)745 ret void746}747 748define void @st3_v2f32(<2 x float> %A, <2 x float> %B, <2 x float> %C, ptr %p) sanitize_memory {749; CHECK-LABEL: define void @st3_v2f32(750; CHECK-SAME: <2 x float> [[A:%.*]], <2 x float> [[B:%.*]], <2 x float> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {751; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8752; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 8753; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8754; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8755; CHECK-NEXT: call void @llvm.donothing()756; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64757; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576758; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr759; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v2i32.p0(<2 x i32> [[TMP2]], <2 x i32> [[TMP3]], <2 x i32> [[TMP4]], ptr [[TMP7]])760; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0761; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]762; CHECK: 8:763; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]764; CHECK-NEXT: unreachable765; CHECK: 9:766; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v2f32.p0(<2 x float> [[A]], <2 x float> [[B]], <2 x float> [[C]], ptr [[P]])767; CHECK-NEXT: ret void768;769 call void @llvm.aarch64.neon.st3.v2f32.p0(<2 x float> %A, <2 x float> %B, <2 x float> %C, ptr %p)770 ret void771}772 773define void @st3_v2f64(<2 x double> %A, <2 x double> %B, <2 x double> %C, ptr %p) sanitize_memory {774; CHECK-LABEL: define void @st3_v2f64(775; CHECK-SAME: <2 x double> [[A:%.*]], <2 x double> [[B:%.*]], <2 x double> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {776; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8777; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8778; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8779; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8780; CHECK-NEXT: call void @llvm.donothing()781; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64782; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576783; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr784; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], <2 x i64> [[TMP4]], ptr [[TMP7]])785; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0786; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]787; CHECK: 8:788; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]789; CHECK-NEXT: unreachable790; CHECK: 9:791; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v2f64.p0(<2 x double> [[A]], <2 x double> [[B]], <2 x double> [[C]], ptr [[P]])792; CHECK-NEXT: ret void793;794 call void @llvm.aarch64.neon.st3.v2f64.p0(<2 x double> %A, <2 x double> %B, <2 x double> %C, ptr %p)795 ret void796}797 798define void @st3_v2i32(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, ptr %p) sanitize_memory {799; CHECK-LABEL: define void @st3_v2i32(800; CHECK-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]], <2 x i32> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {801; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8802; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 8803; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8804; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8805; CHECK-NEXT: call void @llvm.donothing()806; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64807; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576808; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr809; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v2i32.p0(<2 x i32> [[TMP2]], <2 x i32> [[TMP3]], <2 x i32> [[TMP4]], ptr [[TMP7]])810; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0811; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]812; CHECK: 8:813; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]814; CHECK-NEXT: unreachable815; CHECK: 9:816; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v2i32.p0(<2 x i32> [[A]], <2 x i32> [[B]], <2 x i32> [[C]], ptr [[P]])817; CHECK-NEXT: ret void818;819 call void @llvm.aarch64.neon.st3.v2i32.p0(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, ptr %p)820 ret void821}822 823define void @st3_v2i64(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, ptr %p) sanitize_memory {824; CHECK-LABEL: define void @st3_v2i64(825; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], <2 x i64> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {826; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8827; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8828; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8829; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8830; CHECK-NEXT: call void @llvm.donothing()831; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64832; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576833; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr834; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], <2 x i64> [[TMP4]], ptr [[TMP7]])835; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0836; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]837; CHECK: 8:838; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]839; CHECK-NEXT: unreachable840; CHECK: 9:841; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v2i64.p0(<2 x i64> [[A]], <2 x i64> [[B]], <2 x i64> [[C]], ptr [[P]])842; CHECK-NEXT: ret void843;844 call void @llvm.aarch64.neon.st3.v2i64.p0(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, ptr %p)845 ret void846}847 848define void @st3_v4f16(<4 x half> %A, <4 x half> %B, <4 x half> %C, ptr %p) sanitize_memory {849; CHECK-LABEL: define void @st3_v4f16(850; CHECK-SAME: <4 x half> [[A:%.*]], <4 x half> [[B:%.*]], <4 x half> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {851; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8852; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 8853; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8854; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8855; CHECK-NEXT: call void @llvm.donothing()856; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64857; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576858; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr859; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v4i16.p0(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]], <4 x i16> [[TMP4]], ptr [[TMP7]])860; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0861; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]862; CHECK: 8:863; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]864; CHECK-NEXT: unreachable865; CHECK: 9:866; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v4f16.p0(<4 x half> [[A]], <4 x half> [[B]], <4 x half> [[C]], ptr [[P]])867; CHECK-NEXT: ret void868;869 call void @llvm.aarch64.neon.st3.v4f16.p0(<4 x half> %A, <4 x half> %B, <4 x half> %C, ptr %p)870 ret void871}872 873define void @st3_v4f32(<4 x float> %A, <4 x float> %B, <4 x float> %C, ptr %p) sanitize_memory {874; CHECK-LABEL: define void @st3_v4f32(875; CHECK-SAME: <4 x float> [[A:%.*]], <4 x float> [[B:%.*]], <4 x float> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {876; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8877; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8878; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8879; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8880; CHECK-NEXT: call void @llvm.donothing()881; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64882; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576883; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr884; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v4i32.p0(<4 x i32> [[TMP2]], <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], ptr [[TMP7]])885; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0886; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]887; CHECK: 8:888; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]889; CHECK-NEXT: unreachable890; CHECK: 9:891; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v4f32.p0(<4 x float> [[A]], <4 x float> [[B]], <4 x float> [[C]], ptr [[P]])892; CHECK-NEXT: ret void893;894 call void @llvm.aarch64.neon.st3.v4f32.p0(<4 x float> %A, <4 x float> %B, <4 x float> %C, ptr %p)895 ret void896}897 898define void @st3_v4i16(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, ptr %p) sanitize_memory {899; CHECK-LABEL: define void @st3_v4i16(900; CHECK-SAME: <4 x i16> [[A:%.*]], <4 x i16> [[B:%.*]], <4 x i16> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {901; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8902; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 8903; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8904; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8905; CHECK-NEXT: call void @llvm.donothing()906; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64907; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576908; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr909; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v4i16.p0(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]], <4 x i16> [[TMP4]], ptr [[TMP7]])910; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0911; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]912; CHECK: 8:913; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]914; CHECK-NEXT: unreachable915; CHECK: 9:916; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v4i16.p0(<4 x i16> [[A]], <4 x i16> [[B]], <4 x i16> [[C]], ptr [[P]])917; CHECK-NEXT: ret void918;919 call void @llvm.aarch64.neon.st3.v4i16.p0(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, ptr %p)920 ret void921}922 923define void @st3_v4i32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, ptr %p) sanitize_memory {924; CHECK-LABEL: define void @st3_v4i32(925; CHECK-SAME: <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], <4 x i32> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {926; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8927; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8928; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8929; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8930; CHECK-NEXT: call void @llvm.donothing()931; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64932; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576933; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr934; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v4i32.p0(<4 x i32> [[TMP2]], <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], ptr [[TMP7]])935; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0936; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]937; CHECK: 8:938; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]939; CHECK-NEXT: unreachable940; CHECK: 9:941; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v4i32.p0(<4 x i32> [[A]], <4 x i32> [[B]], <4 x i32> [[C]], ptr [[P]])942; CHECK-NEXT: ret void943;944 call void @llvm.aarch64.neon.st3.v4i32.p0(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, ptr %p)945 ret void946}947 948define void @st3_v8f16(<8 x half> %A, <8 x half> %B, <8 x half> %C, ptr %p) sanitize_memory {949; CHECK-LABEL: define void @st3_v8f16(950; CHECK-SAME: <8 x half> [[A:%.*]], <8 x half> [[B:%.*]], <8 x half> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {951; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8952; CHECK-NEXT: [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8953; CHECK-NEXT: [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8954; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8955; CHECK-NEXT: call void @llvm.donothing()956; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64957; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576958; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr959; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v8i16.p0(<8 x i16> [[TMP2]], <8 x i16> [[TMP3]], <8 x i16> [[TMP4]], ptr [[TMP7]])960; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0961; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]962; CHECK: 8:963; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]964; CHECK-NEXT: unreachable965; CHECK: 9:966; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v8f16.p0(<8 x half> [[A]], <8 x half> [[B]], <8 x half> [[C]], ptr [[P]])967; CHECK-NEXT: ret void968;969 call void @llvm.aarch64.neon.st3.v8f16.p0(<8 x half> %A, <8 x half> %B, <8 x half> %C, ptr %p)970 ret void971}972 973define void @st3_v8i16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, ptr %p) sanitize_memory {974; CHECK-LABEL: define void @st3_v8i16(975; CHECK-SAME: <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], <8 x i16> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {976; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8977; CHECK-NEXT: [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8978; CHECK-NEXT: [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8979; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8980; CHECK-NEXT: call void @llvm.donothing()981; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i64982; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576983; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr984; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v8i16.p0(<8 x i16> [[TMP2]], <8 x i16> [[TMP3]], <8 x i16> [[TMP4]], ptr [[TMP7]])985; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 0986; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]987; CHECK: 8:988; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]989; CHECK-NEXT: unreachable990; CHECK: 9:991; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v8i16.p0(<8 x i16> [[A]], <8 x i16> [[B]], <8 x i16> [[C]], ptr [[P]])992; CHECK-NEXT: ret void993;994 call void @llvm.aarch64.neon.st3.v8i16.p0(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, ptr %p)995 ret void996}997 998define void @st3_v8i8(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, ptr %p) sanitize_memory {999; CHECK-LABEL: define void @st3_v8i8(1000; CHECK-SAME: <8 x i8> [[A:%.*]], <8 x i8> [[B:%.*]], <8 x i8> [[C:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1001; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 81002; CHECK-NEXT: [[TMP2:%.*]] = load <8 x i8>, ptr @__msan_param_tls, align 81003; CHECK-NEXT: [[TMP3:%.*]] = load <8 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81004; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81005; CHECK-NEXT: call void @llvm.donothing()1006; CHECK-NEXT: [[TMP5:%.*]] = ptrtoint ptr [[P]] to i641007; CHECK-NEXT: [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761008; CHECK-NEXT: [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1009; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v8i8.p0(<8 x i8> [[TMP2]], <8 x i8> [[TMP3]], <8 x i8> [[TMP4]], ptr [[TMP7]])1010; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01011; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]1012; CHECK: 8:1013; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1014; CHECK-NEXT: unreachable1015; CHECK: 9:1016; CHECK-NEXT: call void @llvm.aarch64.neon.st3.v8i8.p0(<8 x i8> [[A]], <8 x i8> [[B]], <8 x i8> [[C]], ptr [[P]])1017; CHECK-NEXT: ret void1018;1019 call void @llvm.aarch64.neon.st3.v8i8.p0(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, ptr %p)1020 ret void1021}1022 1023define void @st4_v16i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, ptr %p) sanitize_memory {1024; CHECK-LABEL: define void @st4_v16i8(1025; CHECK-SAME: <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], <16 x i8> [[C:%.*]], <16 x i8> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1026; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81027; CHECK-NEXT: [[TMP2:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 81028; CHECK-NEXT: [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81029; CHECK-NEXT: [[TMP4:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81030; CHECK-NEXT: [[TMP5:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81031; CHECK-NEXT: call void @llvm.donothing()1032; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641033; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761034; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1035; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v16i8.p0(<16 x i8> [[TMP2]], <16 x i8> [[TMP3]], <16 x i8> [[TMP4]], <16 x i8> [[TMP5]], ptr [[TMP8]])1036; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01037; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1038; CHECK: 9:1039; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1040; CHECK-NEXT: unreachable1041; CHECK: 10:1042; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v16i8.p0(<16 x i8> [[A]], <16 x i8> [[B]], <16 x i8> [[C]], <16 x i8> [[D]], ptr [[P]])1043; CHECK-NEXT: ret void1044;1045 call void @llvm.aarch64.neon.st4.v16i8.p0(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, ptr %p)1046 ret void1047}1048 1049define void @st4_v1f64(<1 x double> %A, <1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %p) sanitize_memory {1050; CHECK-LABEL: define void @st4_v1f64(1051; CHECK-SAME: <1 x double> [[A:%.*]], <1 x double> [[B:%.*]], <1 x double> [[C:%.*]], <1 x double> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1052; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81053; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 81054; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81055; CHECK-NEXT: [[TMP4:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81056; CHECK-NEXT: [[TMP5:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 81057; CHECK-NEXT: call void @llvm.donothing()1058; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641059; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761060; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1061; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], <1 x i64> [[TMP4]], <1 x i64> [[TMP5]], ptr [[TMP8]])1062; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01063; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1064; CHECK: 9:1065; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1066; CHECK-NEXT: unreachable1067; CHECK: 10:1068; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v1f64.p0(<1 x double> [[A]], <1 x double> [[B]], <1 x double> [[C]], <1 x double> [[D]], ptr [[P]])1069; CHECK-NEXT: ret void1070;1071 call void @llvm.aarch64.neon.st4.v1f64.p0(<1 x double> %A, <1 x double> %B, <1 x double> %C, <1 x double> %D, ptr %p)1072 ret void1073}1074 1075define void @st4_v1i64(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %p) sanitize_memory {1076; CHECK-LABEL: define void @st4_v1i64(1077; CHECK-SAME: <1 x i64> [[A:%.*]], <1 x i64> [[B:%.*]], <1 x i64> [[C:%.*]], <1 x i64> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1078; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81079; CHECK-NEXT: [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 81080; CHECK-NEXT: [[TMP3:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81081; CHECK-NEXT: [[TMP4:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81082; CHECK-NEXT: [[TMP5:%.*]] = load <1 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 81083; CHECK-NEXT: call void @llvm.donothing()1084; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641085; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761086; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1087; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v1i64.p0(<1 x i64> [[TMP2]], <1 x i64> [[TMP3]], <1 x i64> [[TMP4]], <1 x i64> [[TMP5]], ptr [[TMP8]])1088; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01089; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1090; CHECK: 9:1091; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1092; CHECK-NEXT: unreachable1093; CHECK: 10:1094; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v1i64.p0(<1 x i64> [[A]], <1 x i64> [[B]], <1 x i64> [[C]], <1 x i64> [[D]], ptr [[P]])1095; CHECK-NEXT: ret void1096;1097 call void @llvm.aarch64.neon.st4.v1i64.p0(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, ptr %p)1098 ret void1099}1100 1101define void @st4_v2f32(<2 x float> %A, <2 x float> %B, <2 x float> %C, <2 x float> %D, ptr %p) sanitize_memory {1102; CHECK-LABEL: define void @st4_v2f32(1103; CHECK-SAME: <2 x float> [[A:%.*]], <2 x float> [[B:%.*]], <2 x float> [[C:%.*]], <2 x float> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1104; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81105; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81106; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81107; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81108; CHECK-NEXT: [[TMP5:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 81109; CHECK-NEXT: call void @llvm.donothing()1110; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641111; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761112; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1113; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v2i32.p0(<2 x i32> [[TMP2]], <2 x i32> [[TMP3]], <2 x i32> [[TMP4]], <2 x i32> [[TMP5]], ptr [[TMP8]])1114; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01115; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1116; CHECK: 9:1117; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1118; CHECK-NEXT: unreachable1119; CHECK: 10:1120; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v2f32.p0(<2 x float> [[A]], <2 x float> [[B]], <2 x float> [[C]], <2 x float> [[D]], ptr [[P]])1121; CHECK-NEXT: ret void1122;1123 call void @llvm.aarch64.neon.st4.v2f32.p0(<2 x float> %A, <2 x float> %B, <2 x float> %C, <2 x float> %D, ptr %p)1124 ret void1125}1126 1127define void @st4_v2f64(<2 x double> %A, <2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %p) sanitize_memory {1128; CHECK-LABEL: define void @st4_v2f64(1129; CHECK-SAME: <2 x double> [[A:%.*]], <2 x double> [[B:%.*]], <2 x double> [[C:%.*]], <2 x double> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1130; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81131; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 81132; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81133; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81134; CHECK-NEXT: [[TMP5:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81135; CHECK-NEXT: call void @llvm.donothing()1136; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641137; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761138; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1139; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], <2 x i64> [[TMP4]], <2 x i64> [[TMP5]], ptr [[TMP8]])1140; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01141; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1142; CHECK: 9:1143; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1144; CHECK-NEXT: unreachable1145; CHECK: 10:1146; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v2f64.p0(<2 x double> [[A]], <2 x double> [[B]], <2 x double> [[C]], <2 x double> [[D]], ptr [[P]])1147; CHECK-NEXT: ret void1148;1149 call void @llvm.aarch64.neon.st4.v2f64.p0(<2 x double> %A, <2 x double> %B, <2 x double> %C, <2 x double> %D, ptr %p)1150 ret void1151}1152 1153define void @st4_v2i32(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, ptr %p) sanitize_memory {1154; CHECK-LABEL: define void @st4_v2i32(1155; CHECK-SAME: <2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]], <2 x i32> [[C:%.*]], <2 x i32> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1156; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81157; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81158; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81159; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81160; CHECK-NEXT: [[TMP5:%.*]] = load <2 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 81161; CHECK-NEXT: call void @llvm.donothing()1162; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641163; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761164; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1165; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v2i32.p0(<2 x i32> [[TMP2]], <2 x i32> [[TMP3]], <2 x i32> [[TMP4]], <2 x i32> [[TMP5]], ptr [[TMP8]])1166; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01167; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1168; CHECK: 9:1169; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1170; CHECK-NEXT: unreachable1171; CHECK: 10:1172; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v2i32.p0(<2 x i32> [[A]], <2 x i32> [[B]], <2 x i32> [[C]], <2 x i32> [[D]], ptr [[P]])1173; CHECK-NEXT: ret void1174;1175 call void @llvm.aarch64.neon.st4.v2i32.p0(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, ptr %p)1176 ret void1177}1178 1179define void @st4_v2i64(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %p) sanitize_memory {1180; CHECK-LABEL: define void @st4_v2i64(1181; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], <2 x i64> [[C:%.*]], <2 x i64> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1182; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81183; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 81184; CHECK-NEXT: [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81185; CHECK-NEXT: [[TMP4:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81186; CHECK-NEXT: [[TMP5:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81187; CHECK-NEXT: call void @llvm.donothing()1188; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641189; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761190; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1191; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], <2 x i64> [[TMP4]], <2 x i64> [[TMP5]], ptr [[TMP8]])1192; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01193; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1194; CHECK: 9:1195; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1196; CHECK-NEXT: unreachable1197; CHECK: 10:1198; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v2i64.p0(<2 x i64> [[A]], <2 x i64> [[B]], <2 x i64> [[C]], <2 x i64> [[D]], ptr [[P]])1199; CHECK-NEXT: ret void1200;1201 call void @llvm.aarch64.neon.st4.v2i64.p0(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %p)1202 ret void1203}1204 1205define void @st4_v4f16(<4 x half> %A, <4 x half> %B, <4 x half> %C, <4 x half> %D, ptr %p) sanitize_memory {1206; CHECK-LABEL: define void @st4_v4f16(1207; CHECK-SAME: <4 x half> [[A:%.*]], <4 x half> [[B:%.*]], <4 x half> [[C:%.*]], <4 x half> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1208; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81209; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 81210; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81211; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81212; CHECK-NEXT: [[TMP5:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 81213; CHECK-NEXT: call void @llvm.donothing()1214; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641215; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761216; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1217; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v4i16.p0(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]], <4 x i16> [[TMP4]], <4 x i16> [[TMP5]], ptr [[TMP8]])1218; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01219; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1220; CHECK: 9:1221; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1222; CHECK-NEXT: unreachable1223; CHECK: 10:1224; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v4f16.p0(<4 x half> [[A]], <4 x half> [[B]], <4 x half> [[C]], <4 x half> [[D]], ptr [[P]])1225; CHECK-NEXT: ret void1226;1227 call void @llvm.aarch64.neon.st4.v4f16.p0(<4 x half> %A, <4 x half> %B, <4 x half> %C, <4 x half> %D, ptr %p)1228 ret void1229}1230 1231define void @st4_v4f32(<4 x float> %A, <4 x float> %B, <4 x float> %C, <4 x float> %D, ptr %p) sanitize_memory {1232; CHECK-LABEL: define void @st4_v4f32(1233; CHECK-SAME: <4 x float> [[A:%.*]], <4 x float> [[B:%.*]], <4 x float> [[C:%.*]], <4 x float> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1234; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81235; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 81236; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81237; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81238; CHECK-NEXT: [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81239; CHECK-NEXT: call void @llvm.donothing()1240; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641241; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761242; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1243; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v4i32.p0(<4 x i32> [[TMP2]], <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], <4 x i32> [[TMP5]], ptr [[TMP8]])1244; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01245; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1246; CHECK: 9:1247; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1248; CHECK-NEXT: unreachable1249; CHECK: 10:1250; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v4f32.p0(<4 x float> [[A]], <4 x float> [[B]], <4 x float> [[C]], <4 x float> [[D]], ptr [[P]])1251; CHECK-NEXT: ret void1252;1253 call void @llvm.aarch64.neon.st4.v4f32.p0(<4 x float> %A, <4 x float> %B, <4 x float> %C, <4 x float> %D, ptr %p)1254 ret void1255}1256 1257define void @st4_v4i16(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, ptr %p) sanitize_memory {1258; CHECK-LABEL: define void @st4_v4i16(1259; CHECK-SAME: <4 x i16> [[A:%.*]], <4 x i16> [[B:%.*]], <4 x i16> [[C:%.*]], <4 x i16> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1260; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81261; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 81262; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81263; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81264; CHECK-NEXT: [[TMP5:%.*]] = load <4 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 81265; CHECK-NEXT: call void @llvm.donothing()1266; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641267; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761268; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1269; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v4i16.p0(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]], <4 x i16> [[TMP4]], <4 x i16> [[TMP5]], ptr [[TMP8]])1270; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01271; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1272; CHECK: 9:1273; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1274; CHECK-NEXT: unreachable1275; CHECK: 10:1276; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v4i16.p0(<4 x i16> [[A]], <4 x i16> [[B]], <4 x i16> [[C]], <4 x i16> [[D]], ptr [[P]])1277; CHECK-NEXT: ret void1278;1279 call void @llvm.aarch64.neon.st4.v4i16.p0(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, ptr %p)1280 ret void1281}1282 1283define void @st4_v4i32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, ptr %p) sanitize_memory {1284; CHECK-LABEL: define void @st4_v4i32(1285; CHECK-SAME: <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], <4 x i32> [[C:%.*]], <4 x i32> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1286; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81287; CHECK-NEXT: [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 81288; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81289; CHECK-NEXT: [[TMP4:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81290; CHECK-NEXT: [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81291; CHECK-NEXT: call void @llvm.donothing()1292; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641293; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761294; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1295; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v4i32.p0(<4 x i32> [[TMP2]], <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], <4 x i32> [[TMP5]], ptr [[TMP8]])1296; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01297; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1298; CHECK: 9:1299; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1300; CHECK-NEXT: unreachable1301; CHECK: 10:1302; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v4i32.p0(<4 x i32> [[A]], <4 x i32> [[B]], <4 x i32> [[C]], <4 x i32> [[D]], ptr [[P]])1303; CHECK-NEXT: ret void1304;1305 call void @llvm.aarch64.neon.st4.v4i32.p0(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, ptr %p)1306 ret void1307}1308 1309define void @st4_v8f16(<8 x half> %A, <8 x half> %B, <8 x half> %C, <8 x half> %D, ptr %p) sanitize_memory {1310; CHECK-LABEL: define void @st4_v8f16(1311; CHECK-SAME: <8 x half> [[A:%.*]], <8 x half> [[B:%.*]], <8 x half> [[C:%.*]], <8 x half> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1312; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81313; CHECK-NEXT: [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 81314; CHECK-NEXT: [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81315; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81316; CHECK-NEXT: [[TMP5:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81317; CHECK-NEXT: call void @llvm.donothing()1318; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641319; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761320; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1321; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v8i16.p0(<8 x i16> [[TMP2]], <8 x i16> [[TMP3]], <8 x i16> [[TMP4]], <8 x i16> [[TMP5]], ptr [[TMP8]])1322; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01323; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1324; CHECK: 9:1325; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1326; CHECK-NEXT: unreachable1327; CHECK: 10:1328; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v8f16.p0(<8 x half> [[A]], <8 x half> [[B]], <8 x half> [[C]], <8 x half> [[D]], ptr [[P]])1329; CHECK-NEXT: ret void1330;1331 call void @llvm.aarch64.neon.st4.v8f16.p0(<8 x half> %A, <8 x half> %B, <8 x half> %C, <8 x half> %D, ptr %p)1332 ret void1333}1334 1335define void @st4_v8i16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, ptr %p) sanitize_memory {1336; CHECK-LABEL: define void @st4_v8i16(1337; CHECK-SAME: <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], <8 x i16> [[C:%.*]], <8 x i16> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1338; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81339; CHECK-NEXT: [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 81340; CHECK-NEXT: [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81341; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81342; CHECK-NEXT: [[TMP5:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81343; CHECK-NEXT: call void @llvm.donothing()1344; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641345; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761346; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1347; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v8i16.p0(<8 x i16> [[TMP2]], <8 x i16> [[TMP3]], <8 x i16> [[TMP4]], <8 x i16> [[TMP5]], ptr [[TMP8]])1348; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01349; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1350; CHECK: 9:1351; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1352; CHECK-NEXT: unreachable1353; CHECK: 10:1354; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v8i16.p0(<8 x i16> [[A]], <8 x i16> [[B]], <8 x i16> [[C]], <8 x i16> [[D]], ptr [[P]])1355; CHECK-NEXT: ret void1356;1357 call void @llvm.aarch64.neon.st4.v8i16.p0(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, ptr %p)1358 ret void1359}1360 1361define void @st4_v8i8(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, ptr %p) sanitize_memory {1362; CHECK-LABEL: define void @st4_v8i8(1363; CHECK-SAME: <8 x i8> [[A:%.*]], <8 x i8> [[B:%.*]], <8 x i8> [[C:%.*]], <8 x i8> [[D:%.*]], ptr [[P:%.*]]) #[[ATTR0]] {1364; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81365; CHECK-NEXT: [[TMP2:%.*]] = load <8 x i8>, ptr @__msan_param_tls, align 81366; CHECK-NEXT: [[TMP3:%.*]] = load <8 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81367; CHECK-NEXT: [[TMP4:%.*]] = load <8 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81368; CHECK-NEXT: [[TMP5:%.*]] = load <8 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 81369; CHECK-NEXT: call void @llvm.donothing()1370; CHECK-NEXT: [[TMP6:%.*]] = ptrtoint ptr [[P]] to i641371; CHECK-NEXT: [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761372; CHECK-NEXT: [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1373; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8> [[TMP2]], <8 x i8> [[TMP3]], <8 x i8> [[TMP4]], <8 x i8> [[TMP5]], ptr [[TMP8]])1374; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01375; CHECK-NEXT: br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1376; CHECK: 9:1377; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]1378; CHECK-NEXT: unreachable1379; CHECK: 10:1380; CHECK-NEXT: call void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8> [[A]], <8 x i8> [[B]], <8 x i8> [[C]], <8 x i8> [[D]], ptr [[P]])1381; CHECK-NEXT: ret void1382;1383 call void @llvm.aarch64.neon.st4.v8i8.p0(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, ptr %p)1384 ret void1385}1386;.1387; CHECK: [[PROF1]] = !{!"branch_weights", i32 1, i32 1048575}1388;.1389