brintos

brintos / llvm-project-archived public Read only

0
0
Text · 98.7 KiB · 0617c8c Raw
1918 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 store with lane instructions.4; Note: st{2,3,4}lane uses Arm NEON but st1lane does not.5;6; RUN: opt < %s -passes=msan -S | FileCheck %s7;8; Forked from llvm/test/CodeGen/AArch64/arm64-st1.ll9 10target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"11target triple = "aarch64--linux-android9001"12 13define void @st1lane_16b(<16 x i8> %A, ptr %D) sanitize_memory {14; CHECK-LABEL: define void @st1lane_16b(15; CHECK-SAME: <16 x i8> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0:[0-9]+]] {16; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 817; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 818; CHECK-NEXT:    call void @llvm.donothing()19; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 020; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i8, ptr [[D]], i64 121; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <16 x i8> [[TMP2]], i32 122; CHECK-NEXT:    [[TMP:%.*]] = extractelement <16 x i8> [[A]], i32 123; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 024; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1:![0-9]+]]25; CHECK:       3:26; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4:[0-9]+]]27; CHECK-NEXT:    unreachable28; CHECK:       4:29; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i6430; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 19351404648857631; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr32; CHECK-NEXT:    store i8 [[_MSPROP1]], ptr [[TMP7]], align 133; CHECK-NEXT:    store i8 [[TMP]], ptr [[PTR]], align 134; CHECK-NEXT:    ret void35;36  %ptr = getelementptr i8, ptr %D, i64 137  %tmp = extractelement <16 x i8> %A, i32 138  store i8 %tmp, ptr %ptr39  ret void40}41 42define void @st1lane0_16b(<16 x i8> %A, ptr %D) sanitize_memory {43; CHECK-LABEL: define void @st1lane0_16b(44; CHECK-SAME: <16 x i8> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {45; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 846; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 847; CHECK-NEXT:    call void @llvm.donothing()48; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 049; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i8, ptr [[D]], i64 150; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <16 x i8> [[TMP2]], i32 051; CHECK-NEXT:    [[TMP:%.*]] = extractelement <16 x i8> [[A]], i32 052; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 053; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]54; CHECK:       3:55; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]56; CHECK-NEXT:    unreachable57; CHECK:       4:58; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i6459; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 19351404648857660; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr61; CHECK-NEXT:    store i8 [[_MSPROP1]], ptr [[TMP7]], align 162; CHECK-NEXT:    store i8 [[TMP]], ptr [[PTR]], align 163; CHECK-NEXT:    ret void64;65  %ptr = getelementptr i8, ptr %D, i64 166  %tmp = extractelement <16 x i8> %A, i32 067  store i8 %tmp, ptr %ptr68  ret void69}70 71define void @st1lane0u_16b(<16 x i8> %A, ptr %D) sanitize_memory {72; CHECK-LABEL: define void @st1lane0u_16b(73; CHECK-SAME: <16 x i8> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {74; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 875; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 876; CHECK-NEXT:    call void @llvm.donothing()77; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 078; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i8, ptr [[D]], i64 -179; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <16 x i8> [[TMP2]], i32 080; CHECK-NEXT:    [[TMP:%.*]] = extractelement <16 x i8> [[A]], i32 081; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 082; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]83; CHECK:       3:84; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]85; CHECK-NEXT:    unreachable86; CHECK:       4:87; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i6488; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 19351404648857689; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr90; CHECK-NEXT:    store i8 [[_MSPROP1]], ptr [[TMP7]], align 191; CHECK-NEXT:    store i8 [[TMP]], ptr [[PTR]], align 192; CHECK-NEXT:    ret void93;94  %ptr = getelementptr i8, ptr %D, i64 -195  %tmp = extractelement <16 x i8> %A, i32 096  store i8 %tmp, ptr %ptr97  ret void98}99 100define void @st1lane_ro_16b(<16 x i8> %A, ptr %D, i64 %offset) sanitize_memory {101; CHECK-LABEL: define void @st1lane_ro_16b(102; CHECK-SAME: <16 x i8> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {103; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8104; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8105; CHECK-NEXT:    [[TMP3:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 8106; CHECK-NEXT:    call void @llvm.donothing()107; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]108; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i8, ptr [[D]], i64 [[OFFSET]]109; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <16 x i8> [[TMP3]], i32 1110; CHECK-NEXT:    [[TMP:%.*]] = extractelement <16 x i8> [[A]], i32 1111; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0112; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]113; CHECK:       4:114; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]115; CHECK-NEXT:    unreachable116; CHECK:       5:117; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64118; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576119; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr120; CHECK-NEXT:    store i8 [[_MSPROP1]], ptr [[TMP8]], align 1121; CHECK-NEXT:    store i8 [[TMP]], ptr [[PTR]], align 1122; CHECK-NEXT:    ret void123;124  %ptr = getelementptr i8, ptr %D, i64 %offset125  %tmp = extractelement <16 x i8> %A, i32 1126  store i8 %tmp, ptr %ptr127  ret void128}129 130define void @st1lane0_ro_16b(<16 x i8> %A, ptr %D, i64 %offset) sanitize_memory {131; CHECK-LABEL: define void @st1lane0_ro_16b(132; CHECK-SAME: <16 x i8> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {133; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8134; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8135; CHECK-NEXT:    [[TMP3:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 8136; CHECK-NEXT:    call void @llvm.donothing()137; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]138; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i8, ptr [[D]], i64 [[OFFSET]]139; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <16 x i8> [[TMP3]], i32 0140; CHECK-NEXT:    [[TMP:%.*]] = extractelement <16 x i8> [[A]], i32 0141; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0142; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]143; CHECK:       4:144; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]145; CHECK-NEXT:    unreachable146; CHECK:       5:147; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64148; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576149; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr150; CHECK-NEXT:    store i8 [[_MSPROP1]], ptr [[TMP8]], align 1151; CHECK-NEXT:    store i8 [[TMP]], ptr [[PTR]], align 1152; CHECK-NEXT:    ret void153;154  %ptr = getelementptr i8, ptr %D, i64 %offset155  %tmp = extractelement <16 x i8> %A, i32 0156  store i8 %tmp, ptr %ptr157  ret void158}159 160define void @st1lane_8h(<8 x i16> %A, ptr %D) sanitize_memory {161; CHECK-LABEL: define void @st1lane_8h(162; CHECK-SAME: <8 x i16> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {163; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8164; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8165; CHECK-NEXT:    call void @llvm.donothing()166; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0167; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i16, ptr [[D]], i64 1168; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <8 x i16> [[TMP2]], i32 1169; CHECK-NEXT:    [[TMP:%.*]] = extractelement <8 x i16> [[A]], i32 1170; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0171; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]172; CHECK:       3:173; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]174; CHECK-NEXT:    unreachable175; CHECK:       4:176; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64177; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576178; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr179; CHECK-NEXT:    store i16 [[_MSPROP1]], ptr [[TMP7]], align 2180; CHECK-NEXT:    store i16 [[TMP]], ptr [[PTR]], align 2181; CHECK-NEXT:    ret void182;183  %ptr = getelementptr i16, ptr %D, i64 1184  %tmp = extractelement <8 x i16> %A, i32 1185  store i16 %tmp, ptr %ptr186  ret void187}188 189define void @st1lane0_8h(<8 x i16> %A, ptr %D) sanitize_memory {190; CHECK-LABEL: define void @st1lane0_8h(191; CHECK-SAME: <8 x i16> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {192; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8193; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8194; CHECK-NEXT:    call void @llvm.donothing()195; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0196; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i16, ptr [[D]], i64 1197; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <8 x i16> [[TMP2]], i32 0198; CHECK-NEXT:    [[TMP:%.*]] = extractelement <8 x i16> [[A]], i32 0199; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0200; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]201; CHECK:       3:202; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]203; CHECK-NEXT:    unreachable204; CHECK:       4:205; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64206; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576207; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr208; CHECK-NEXT:    store i16 [[_MSPROP1]], ptr [[TMP7]], align 2209; CHECK-NEXT:    store i16 [[TMP]], ptr [[PTR]], align 2210; CHECK-NEXT:    ret void211;212  %ptr = getelementptr i16, ptr %D, i64 1213  %tmp = extractelement <8 x i16> %A, i32 0214  store i16 %tmp, ptr %ptr215  ret void216}217 218define void @st1lane0u_8h(<8 x i16> %A, ptr %D) sanitize_memory {219; CHECK-LABEL: define void @st1lane0u_8h(220; CHECK-SAME: <8 x i16> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {221; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8222; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8223; CHECK-NEXT:    call void @llvm.donothing()224; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0225; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i16, ptr [[D]], i64 -1226; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <8 x i16> [[TMP2]], i32 0227; CHECK-NEXT:    [[TMP:%.*]] = extractelement <8 x i16> [[A]], i32 0228; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0229; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]230; CHECK:       3:231; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]232; CHECK-NEXT:    unreachable233; CHECK:       4:234; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64235; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576236; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr237; CHECK-NEXT:    store i16 [[_MSPROP1]], ptr [[TMP7]], align 2238; CHECK-NEXT:    store i16 [[TMP]], ptr [[PTR]], align 2239; CHECK-NEXT:    ret void240;241  %ptr = getelementptr i16, ptr %D, i64 -1242  %tmp = extractelement <8 x i16> %A, i32 0243  store i16 %tmp, ptr %ptr244  ret void245}246 247define void @st1lane_ro_8h(<8 x i16> %A, ptr %D, i64 %offset) sanitize_memory {248; CHECK-LABEL: define void @st1lane_ro_8h(249; CHECK-SAME: <8 x i16> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {250; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8251; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8252; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8253; CHECK-NEXT:    call void @llvm.donothing()254; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]255; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i16, ptr [[D]], i64 [[OFFSET]]256; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <8 x i16> [[TMP3]], i32 1257; CHECK-NEXT:    [[TMP:%.*]] = extractelement <8 x i16> [[A]], i32 1258; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0259; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]260; CHECK:       4:261; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]262; CHECK-NEXT:    unreachable263; CHECK:       5:264; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64265; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576266; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr267; CHECK-NEXT:    store i16 [[_MSPROP1]], ptr [[TMP8]], align 2268; CHECK-NEXT:    store i16 [[TMP]], ptr [[PTR]], align 2269; CHECK-NEXT:    ret void270;271  %ptr = getelementptr i16, ptr %D, i64 %offset272  %tmp = extractelement <8 x i16> %A, i32 1273  store i16 %tmp, ptr %ptr274  ret void275}276 277define void @st1lane0_ro_8h(<8 x i16> %A, ptr %D, i64 %offset) sanitize_memory {278; CHECK-LABEL: define void @st1lane0_ro_8h(279; CHECK-SAME: <8 x i16> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {280; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8281; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8282; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8283; CHECK-NEXT:    call void @llvm.donothing()284; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]285; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i16, ptr [[D]], i64 [[OFFSET]]286; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <8 x i16> [[TMP3]], i32 0287; CHECK-NEXT:    [[TMP:%.*]] = extractelement <8 x i16> [[A]], i32 0288; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0289; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]290; CHECK:       4:291; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]292; CHECK-NEXT:    unreachable293; CHECK:       5:294; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64295; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576296; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr297; CHECK-NEXT:    store i16 [[_MSPROP1]], ptr [[TMP8]], align 2298; CHECK-NEXT:    store i16 [[TMP]], ptr [[PTR]], align 2299; CHECK-NEXT:    ret void300;301  %ptr = getelementptr i16, ptr %D, i64 %offset302  %tmp = extractelement <8 x i16> %A, i32 0303  store i16 %tmp, ptr %ptr304  ret void305}306 307define void @st1lane_4s(<4 x i32> %A, ptr %D) sanitize_memory {308; CHECK-LABEL: define void @st1lane_4s(309; CHECK-SAME: <4 x i32> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {310; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8311; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8312; CHECK-NEXT:    call void @llvm.donothing()313; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0314; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, ptr [[D]], i64 1315; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i32> [[TMP2]], i32 1316; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x i32> [[A]], i32 1317; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0318; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]319; CHECK:       3:320; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]321; CHECK-NEXT:    unreachable322; CHECK:       4:323; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64324; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576325; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr326; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 4327; CHECK-NEXT:    store i32 [[TMP]], ptr [[PTR]], align 4328; CHECK-NEXT:    ret void329;330  %ptr = getelementptr i32, ptr %D, i64 1331  %tmp = extractelement <4 x i32> %A, i32 1332  store i32 %tmp, ptr %ptr333  ret void334}335 336define void @st1lane0_4s(<4 x i32> %A, ptr %D) sanitize_memory {337; CHECK-LABEL: define void @st1lane0_4s(338; CHECK-SAME: <4 x i32> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {339; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8340; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8341; CHECK-NEXT:    call void @llvm.donothing()342; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0343; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, ptr [[D]], i64 1344; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i32> [[TMP2]], i32 0345; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x i32> [[A]], i32 0346; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0347; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]348; CHECK:       3:349; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]350; CHECK-NEXT:    unreachable351; CHECK:       4:352; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64353; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576354; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr355; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 4356; CHECK-NEXT:    store i32 [[TMP]], ptr [[PTR]], align 4357; CHECK-NEXT:    ret void358;359  %ptr = getelementptr i32, ptr %D, i64 1360  %tmp = extractelement <4 x i32> %A, i32 0361  store i32 %tmp, ptr %ptr362  ret void363}364 365define void @st1lane0u_4s(<4 x i32> %A, ptr %D) sanitize_memory {366; CHECK-LABEL: define void @st1lane0u_4s(367; CHECK-SAME: <4 x i32> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {368; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8369; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8370; CHECK-NEXT:    call void @llvm.donothing()371; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0372; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, ptr [[D]], i64 -1373; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i32> [[TMP2]], i32 0374; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x i32> [[A]], i32 0375; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0376; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]377; CHECK:       3:378; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]379; CHECK-NEXT:    unreachable380; CHECK:       4:381; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64382; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576383; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr384; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 4385; CHECK-NEXT:    store i32 [[TMP]], ptr [[PTR]], align 4386; CHECK-NEXT:    ret void387;388  %ptr = getelementptr i32, ptr %D, i64 -1389  %tmp = extractelement <4 x i32> %A, i32 0390  store i32 %tmp, ptr %ptr391  ret void392}393 394define void @st1lane_ro_4s(<4 x i32> %A, ptr %D, i64 %offset) sanitize_memory {395; CHECK-LABEL: define void @st1lane_ro_4s(396; CHECK-SAME: <4 x i32> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {397; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8398; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8399; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8400; CHECK-NEXT:    call void @llvm.donothing()401; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]402; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, ptr [[D]], i64 [[OFFSET]]403; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i32> [[TMP3]], i32 1404; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x i32> [[A]], i32 1405; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0406; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]407; CHECK:       4:408; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]409; CHECK-NEXT:    unreachable410; CHECK:       5:411; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64412; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576413; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr414; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP8]], align 4415; CHECK-NEXT:    store i32 [[TMP]], ptr [[PTR]], align 4416; CHECK-NEXT:    ret void417;418  %ptr = getelementptr i32, ptr %D, i64 %offset419  %tmp = extractelement <4 x i32> %A, i32 1420  store i32 %tmp, ptr %ptr421  ret void422}423 424define void @st1lane0_ro_4s(<4 x i32> %A, ptr %D, i64 %offset) sanitize_memory {425; CHECK-LABEL: define void @st1lane0_ro_4s(426; CHECK-SAME: <4 x i32> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {427; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8428; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8429; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8430; CHECK-NEXT:    call void @llvm.donothing()431; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]432; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, ptr [[D]], i64 [[OFFSET]]433; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i32> [[TMP3]], i32 0434; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x i32> [[A]], i32 0435; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0436; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]437; CHECK:       4:438; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]439; CHECK-NEXT:    unreachable440; CHECK:       5:441; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64442; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576443; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr444; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP8]], align 4445; CHECK-NEXT:    store i32 [[TMP]], ptr [[PTR]], align 4446; CHECK-NEXT:    ret void447;448  %ptr = getelementptr i32, ptr %D, i64 %offset449  %tmp = extractelement <4 x i32> %A, i32 0450  store i32 %tmp, ptr %ptr451  ret void452}453 454define void @st1lane_4s_float(<4 x float> %A, ptr %D) sanitize_memory {455; CHECK-LABEL: define void @st1lane_4s_float(456; CHECK-SAME: <4 x float> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {457; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8458; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8459; CHECK-NEXT:    call void @llvm.donothing()460; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0461; CHECK-NEXT:    [[PTR:%.*]] = getelementptr float, ptr [[D]], i64 1462; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i32> [[TMP2]], i32 1463; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x float> [[A]], i32 1464; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0465; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]466; CHECK:       3:467; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]468; CHECK-NEXT:    unreachable469; CHECK:       4:470; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64471; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576472; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr473; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 4474; CHECK-NEXT:    store float [[TMP]], ptr [[PTR]], align 4475; CHECK-NEXT:    ret void476;477  %ptr = getelementptr float, ptr %D, i64 1478  %tmp = extractelement <4 x float> %A, i32 1479  store float %tmp, ptr %ptr480  ret void481}482 483define void @st1lane0_4s_float(<4 x float> %A, ptr %D) sanitize_memory {484; CHECK-LABEL: define void @st1lane0_4s_float(485; CHECK-SAME: <4 x float> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {486; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8487; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8488; CHECK-NEXT:    call void @llvm.donothing()489; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0490; CHECK-NEXT:    [[PTR:%.*]] = getelementptr float, ptr [[D]], i64 1491; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i32> [[TMP2]], i32 0492; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x float> [[A]], i32 0493; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0494; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]495; CHECK:       3:496; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]497; CHECK-NEXT:    unreachable498; CHECK:       4:499; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64500; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576501; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr502; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 4503; CHECK-NEXT:    store float [[TMP]], ptr [[PTR]], align 4504; CHECK-NEXT:    ret void505;506  %ptr = getelementptr float, ptr %D, i64 1507  %tmp = extractelement <4 x float> %A, i32 0508  store float %tmp, ptr %ptr509  ret void510}511 512define void @st1lane0u_4s_float(<4 x float> %A, ptr %D) sanitize_memory {513; CHECK-LABEL: define void @st1lane0u_4s_float(514; CHECK-SAME: <4 x float> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {515; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8516; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8517; CHECK-NEXT:    call void @llvm.donothing()518; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0519; CHECK-NEXT:    [[PTR:%.*]] = getelementptr float, ptr [[D]], i64 -1520; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i32> [[TMP2]], i32 0521; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x float> [[A]], i32 0522; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0523; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]524; CHECK:       3:525; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]526; CHECK-NEXT:    unreachable527; CHECK:       4:528; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64529; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576530; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr531; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 4532; CHECK-NEXT:    store float [[TMP]], ptr [[PTR]], align 4533; CHECK-NEXT:    ret void534;535  %ptr = getelementptr float, ptr %D, i64 -1536  %tmp = extractelement <4 x float> %A, i32 0537  store float %tmp, ptr %ptr538  ret void539}540 541define void @st1lane_ro_4s_float(<4 x float> %A, ptr %D, i64 %offset) sanitize_memory {542; CHECK-LABEL: define void @st1lane_ro_4s_float(543; CHECK-SAME: <4 x float> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {544; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8545; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8546; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8547; CHECK-NEXT:    call void @llvm.donothing()548; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]549; CHECK-NEXT:    [[PTR:%.*]] = getelementptr float, ptr [[D]], i64 [[OFFSET]]550; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i32> [[TMP3]], i32 1551; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x float> [[A]], i32 1552; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0553; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]554; CHECK:       4:555; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]556; CHECK-NEXT:    unreachable557; CHECK:       5:558; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64559; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576560; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr561; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP8]], align 4562; CHECK-NEXT:    store float [[TMP]], ptr [[PTR]], align 4563; CHECK-NEXT:    ret void564;565  %ptr = getelementptr float, ptr %D, i64 %offset566  %tmp = extractelement <4 x float> %A, i32 1567  store float %tmp, ptr %ptr568  ret void569}570 571define void @st1lane0_ro_4s_float(<4 x float> %A, ptr %D, i64 %offset) sanitize_memory {572; CHECK-LABEL: define void @st1lane0_ro_4s_float(573; CHECK-SAME: <4 x float> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {574; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8575; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8576; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 8577; CHECK-NEXT:    call void @llvm.donothing()578; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]579; CHECK-NEXT:    [[PTR:%.*]] = getelementptr float, ptr [[D]], i64 [[OFFSET]]580; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i32> [[TMP3]], i32 0581; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x float> [[A]], i32 0582; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0583; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]584; CHECK:       4:585; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]586; CHECK-NEXT:    unreachable587; CHECK:       5:588; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64589; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576590; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr591; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP8]], align 4592; CHECK-NEXT:    store float [[TMP]], ptr [[PTR]], align 4593; CHECK-NEXT:    ret void594;595  %ptr = getelementptr float, ptr %D, i64 %offset596  %tmp = extractelement <4 x float> %A, i32 0597  store float %tmp, ptr %ptr598  ret void599}600 601define void @st1lane_2d(<2 x i64> %A, ptr %D) sanitize_memory {602; CHECK-LABEL: define void @st1lane_2d(603; CHECK-SAME: <2 x i64> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {604; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8605; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8606; CHECK-NEXT:    call void @llvm.donothing()607; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0608; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i64, ptr [[D]], i64 1609; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i64> [[TMP2]], i32 1610; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x i64> [[A]], i32 1611; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0612; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]613; CHECK:       3:614; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]615; CHECK-NEXT:    unreachable616; CHECK:       4:617; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64618; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576619; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr620; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP7]], align 8621; CHECK-NEXT:    store i64 [[TMP]], ptr [[PTR]], align 8622; CHECK-NEXT:    ret void623;624  %ptr = getelementptr i64, ptr %D, i64 1625  %tmp = extractelement <2 x i64> %A, i32 1626  store i64 %tmp, ptr %ptr627  ret void628}629 630define void @st1lane0_2d(<2 x i64> %A, ptr %D) sanitize_memory {631; CHECK-LABEL: define void @st1lane0_2d(632; CHECK-SAME: <2 x i64> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {633; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8634; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8635; CHECK-NEXT:    call void @llvm.donothing()636; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0637; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i64, ptr [[D]], i64 1638; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i64> [[TMP2]], i32 0639; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x i64> [[A]], i32 0640; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0641; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]642; CHECK:       3:643; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]644; CHECK-NEXT:    unreachable645; CHECK:       4:646; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64647; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576648; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr649; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP7]], align 8650; CHECK-NEXT:    store i64 [[TMP]], ptr [[PTR]], align 8651; CHECK-NEXT:    ret void652;653  %ptr = getelementptr i64, ptr %D, i64 1654  %tmp = extractelement <2 x i64> %A, i32 0655  store i64 %tmp, ptr %ptr656  ret void657}658 659define void @st1lane0u_2d(<2 x i64> %A, ptr %D) sanitize_memory {660; CHECK-LABEL: define void @st1lane0u_2d(661; CHECK-SAME: <2 x i64> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {662; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8663; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8664; CHECK-NEXT:    call void @llvm.donothing()665; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0666; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i64, ptr [[D]], i64 -1667; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i64> [[TMP2]], i32 0668; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x i64> [[A]], i32 0669; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0670; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]671; CHECK:       3:672; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]673; CHECK-NEXT:    unreachable674; CHECK:       4:675; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64676; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576677; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr678; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP7]], align 8679; CHECK-NEXT:    store i64 [[TMP]], ptr [[PTR]], align 8680; CHECK-NEXT:    ret void681;682  %ptr = getelementptr i64, ptr %D, i64 -1683  %tmp = extractelement <2 x i64> %A, i32 0684  store i64 %tmp, ptr %ptr685  ret void686}687 688define void @st1lane_ro_2d(<2 x i64> %A, ptr %D, i64 %offset) sanitize_memory {689; CHECK-LABEL: define void @st1lane_ro_2d(690; CHECK-SAME: <2 x i64> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {691; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8692; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8693; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8694; CHECK-NEXT:    call void @llvm.donothing()695; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]696; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i64, ptr [[D]], i64 [[OFFSET]]697; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i64> [[TMP3]], i32 1698; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x i64> [[A]], i32 1699; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0700; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]701; CHECK:       4:702; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]703; CHECK-NEXT:    unreachable704; CHECK:       5:705; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64706; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576707; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr708; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP8]], align 8709; CHECK-NEXT:    store i64 [[TMP]], ptr [[PTR]], align 8710; CHECK-NEXT:    ret void711;712  %ptr = getelementptr i64, ptr %D, i64 %offset713  %tmp = extractelement <2 x i64> %A, i32 1714  store i64 %tmp, ptr %ptr715  ret void716}717 718define void @st1lane0_ro_2d(<2 x i64> %A, ptr %D, i64 %offset) sanitize_memory {719; CHECK-LABEL: define void @st1lane0_ro_2d(720; CHECK-SAME: <2 x i64> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {721; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8722; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8723; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8724; CHECK-NEXT:    call void @llvm.donothing()725; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]726; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i64, ptr [[D]], i64 [[OFFSET]]727; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i64> [[TMP3]], i32 0728; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x i64> [[A]], i32 0729; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0730; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]731; CHECK:       4:732; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]733; CHECK-NEXT:    unreachable734; CHECK:       5:735; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64736; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576737; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr738; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP8]], align 8739; CHECK-NEXT:    store i64 [[TMP]], ptr [[PTR]], align 8740; CHECK-NEXT:    ret void741;742  %ptr = getelementptr i64, ptr %D, i64 %offset743  %tmp = extractelement <2 x i64> %A, i32 0744  store i64 %tmp, ptr %ptr745  ret void746}747 748define void @st1lane_2d_double(<2 x double> %A, ptr %D) sanitize_memory {749; CHECK-LABEL: define void @st1lane_2d_double(750; CHECK-SAME: <2 x double> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {751; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8752; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8753; CHECK-NEXT:    call void @llvm.donothing()754; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0755; CHECK-NEXT:    [[PTR:%.*]] = getelementptr double, ptr [[D]], i64 1756; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i64> [[TMP2]], i32 1757; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x double> [[A]], i32 1758; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0759; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]760; CHECK:       3:761; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]762; CHECK-NEXT:    unreachable763; CHECK:       4:764; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64765; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576766; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr767; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP7]], align 8768; CHECK-NEXT:    store double [[TMP]], ptr [[PTR]], align 8769; CHECK-NEXT:    ret void770;771  %ptr = getelementptr double, ptr %D, i64 1772  %tmp = extractelement <2 x double> %A, i32 1773  store double %tmp, ptr %ptr774  ret void775}776 777define void @st1lane0_2d_double(<2 x double> %A, ptr %D) sanitize_memory {778; CHECK-LABEL: define void @st1lane0_2d_double(779; CHECK-SAME: <2 x double> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {780; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8781; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8782; CHECK-NEXT:    call void @llvm.donothing()783; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0784; CHECK-NEXT:    [[PTR:%.*]] = getelementptr double, ptr [[D]], i64 1785; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i64> [[TMP2]], i32 0786; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x double> [[A]], i32 0787; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0788; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]789; CHECK:       3:790; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]791; CHECK-NEXT:    unreachable792; CHECK:       4:793; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64794; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576795; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr796; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP7]], align 8797; CHECK-NEXT:    store double [[TMP]], ptr [[PTR]], align 8798; CHECK-NEXT:    ret void799;800  %ptr = getelementptr double, ptr %D, i64 1801  %tmp = extractelement <2 x double> %A, i32 0802  store double %tmp, ptr %ptr803  ret void804}805 806define void @st1lane0u_2d_double(<2 x double> %A, ptr %D) sanitize_memory {807; CHECK-LABEL: define void @st1lane0u_2d_double(808; CHECK-SAME: <2 x double> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {809; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8810; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8811; CHECK-NEXT:    call void @llvm.donothing()812; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0813; CHECK-NEXT:    [[PTR:%.*]] = getelementptr double, ptr [[D]], i64 -1814; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i64> [[TMP2]], i32 0815; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x double> [[A]], i32 0816; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0817; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]818; CHECK:       3:819; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]820; CHECK-NEXT:    unreachable821; CHECK:       4:822; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64823; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576824; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr825; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP7]], align 8826; CHECK-NEXT:    store double [[TMP]], ptr [[PTR]], align 8827; CHECK-NEXT:    ret void828;829  %ptr = getelementptr double, ptr %D, i64 -1830  %tmp = extractelement <2 x double> %A, i32 0831  store double %tmp, ptr %ptr832  ret void833}834 835define void @st1lane_ro_2d_double(<2 x double> %A, ptr %D, i64 %offset) sanitize_memory {836; CHECK-LABEL: define void @st1lane_ro_2d_double(837; CHECK-SAME: <2 x double> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {838; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8839; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8840; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8841; CHECK-NEXT:    call void @llvm.donothing()842; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]843; CHECK-NEXT:    [[PTR:%.*]] = getelementptr double, ptr [[D]], i64 [[OFFSET]]844; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i64> [[TMP3]], i32 1845; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x double> [[A]], i32 1846; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0847; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]848; CHECK:       4:849; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]850; CHECK-NEXT:    unreachable851; CHECK:       5:852; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64853; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576854; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr855; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP8]], align 8856; CHECK-NEXT:    store double [[TMP]], ptr [[PTR]], align 8857; CHECK-NEXT:    ret void858;859  %ptr = getelementptr double, ptr %D, i64 %offset860  %tmp = extractelement <2 x double> %A, i32 1861  store double %tmp, ptr %ptr862  ret void863}864 865define void @st1lane0_ro_2d_double(<2 x double> %A, ptr %D, i64 %offset) sanitize_memory {866; CHECK-LABEL: define void @st1lane0_ro_2d_double(867; CHECK-SAME: <2 x double> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {868; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8869; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 24), align 8870; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 8871; CHECK-NEXT:    call void @llvm.donothing()872; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]873; CHECK-NEXT:    [[PTR:%.*]] = getelementptr double, ptr [[D]], i64 [[OFFSET]]874; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i64> [[TMP3]], i32 0875; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x double> [[A]], i32 0876; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0877; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]878; CHECK:       4:879; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]880; CHECK-NEXT:    unreachable881; CHECK:       5:882; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64883; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576884; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr885; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP8]], align 8886; CHECK-NEXT:    store double [[TMP]], ptr [[PTR]], align 8887; CHECK-NEXT:    ret void888;889  %ptr = getelementptr double, ptr %D, i64 %offset890  %tmp = extractelement <2 x double> %A, i32 0891  store double %tmp, ptr %ptr892  ret void893}894 895define void @st1lane_8b(<8 x i8> %A, ptr %D) sanitize_memory {896; CHECK-LABEL: define void @st1lane_8b(897; CHECK-SAME: <8 x i8> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {898; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8899; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr @__msan_param_tls, align 8900; CHECK-NEXT:    call void @llvm.donothing()901; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0902; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i8, ptr [[D]], i64 1903; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <8 x i8> [[TMP2]], i32 1904; CHECK-NEXT:    [[TMP:%.*]] = extractelement <8 x i8> [[A]], i32 1905; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0906; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]907; CHECK:       3:908; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]909; CHECK-NEXT:    unreachable910; CHECK:       4:911; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i64912; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576913; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr914; CHECK-NEXT:    store i8 [[_MSPROP1]], ptr [[TMP7]], align 1915; CHECK-NEXT:    store i8 [[TMP]], ptr [[PTR]], align 1916; CHECK-NEXT:    ret void917;918  %ptr = getelementptr i8, ptr %D, i64 1919  %tmp = extractelement <8 x i8> %A, i32 1920  store i8 %tmp, ptr %ptr921  ret void922}923 924define void @st1lane_ro_8b(<8 x i8> %A, ptr %D, i64 %offset) sanitize_memory {925; CHECK-LABEL: define void @st1lane_ro_8b(926; CHECK-SAME: <8 x i8> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {927; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8928; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8929; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i8>, ptr @__msan_param_tls, align 8930; CHECK-NEXT:    call void @llvm.donothing()931; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]932; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i8, ptr [[D]], i64 [[OFFSET]]933; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <8 x i8> [[TMP3]], i32 1934; CHECK-NEXT:    [[TMP:%.*]] = extractelement <8 x i8> [[A]], i32 1935; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0936; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]937; CHECK:       4:938; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]939; CHECK-NEXT:    unreachable940; CHECK:       5:941; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64942; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576943; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr944; CHECK-NEXT:    store i8 [[_MSPROP1]], ptr [[TMP8]], align 1945; CHECK-NEXT:    store i8 [[TMP]], ptr [[PTR]], align 1946; CHECK-NEXT:    ret void947;948  %ptr = getelementptr i8, ptr %D, i64 %offset949  %tmp = extractelement <8 x i8> %A, i32 1950  store i8 %tmp, ptr %ptr951  ret void952}953 954define void @st1lane0_ro_8b(<8 x i8> %A, ptr %D, i64 %offset) sanitize_memory {955; CHECK-LABEL: define void @st1lane0_ro_8b(956; CHECK-SAME: <8 x i8> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {957; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8958; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8959; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i8>, ptr @__msan_param_tls, align 8960; CHECK-NEXT:    call void @llvm.donothing()961; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]962; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i8, ptr [[D]], i64 [[OFFSET]]963; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <8 x i8> [[TMP3]], i32 0964; CHECK-NEXT:    [[TMP:%.*]] = extractelement <8 x i8> [[A]], i32 0965; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0966; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]967; CHECK:       4:968; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]969; CHECK-NEXT:    unreachable970; CHECK:       5:971; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i64972; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 193514046488576973; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr974; CHECK-NEXT:    store i8 [[_MSPROP1]], ptr [[TMP8]], align 1975; CHECK-NEXT:    store i8 [[TMP]], ptr [[PTR]], align 1976; CHECK-NEXT:    ret void977;978  %ptr = getelementptr i8, ptr %D, i64 %offset979  %tmp = extractelement <8 x i8> %A, i32 0980  store i8 %tmp, ptr %ptr981  ret void982}983 984define void @st1lane_4h(<4 x i16> %A, ptr %D) sanitize_memory {985; CHECK-LABEL: define void @st1lane_4h(986; CHECK-SAME: <4 x i16> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {987; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 8988; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 8989; CHECK-NEXT:    call void @llvm.donothing()990; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 0991; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i16, ptr [[D]], i64 1992; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i16> [[TMP2]], i32 1993; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x i16> [[A]], i32 1994; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 0995; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]996; CHECK:       3:997; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]998; CHECK-NEXT:    unreachable999; CHECK:       4:1000; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641001; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761002; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1003; CHECK-NEXT:    store i16 [[_MSPROP1]], ptr [[TMP7]], align 21004; CHECK-NEXT:    store i16 [[TMP]], ptr [[PTR]], align 21005; CHECK-NEXT:    ret void1006;1007  %ptr = getelementptr i16, ptr %D, i64 11008  %tmp = extractelement <4 x i16> %A, i32 11009  store i16 %tmp, ptr %ptr1010  ret void1011}1012 1013define void @st1lane0_4h(<4 x i16> %A, ptr %D) sanitize_memory {1014; CHECK-LABEL: define void @st1lane0_4h(1015; CHECK-SAME: <4 x i16> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1016; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81017; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 81018; CHECK-NEXT:    call void @llvm.donothing()1019; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01020; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i16, ptr [[D]], i64 11021; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i16> [[TMP2]], i32 01022; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x i16> [[A]], i32 01023; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01024; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1025; CHECK:       3:1026; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1027; CHECK-NEXT:    unreachable1028; CHECK:       4:1029; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641030; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761031; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1032; CHECK-NEXT:    store i16 [[_MSPROP1]], ptr [[TMP7]], align 21033; CHECK-NEXT:    store i16 [[TMP]], ptr [[PTR]], align 21034; CHECK-NEXT:    ret void1035;1036  %ptr = getelementptr i16, ptr %D, i64 11037  %tmp = extractelement <4 x i16> %A, i32 01038  store i16 %tmp, ptr %ptr1039  ret void1040}1041 1042define void @st1lane0u_4h(<4 x i16> %A, ptr %D) sanitize_memory {1043; CHECK-LABEL: define void @st1lane0u_4h(1044; CHECK-SAME: <4 x i16> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1045; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81046; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 81047; CHECK-NEXT:    call void @llvm.donothing()1048; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01049; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i16, ptr [[D]], i64 -11050; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i16> [[TMP2]], i32 01051; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x i16> [[A]], i32 01052; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01053; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1054; CHECK:       3:1055; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1056; CHECK-NEXT:    unreachable1057; CHECK:       4:1058; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641059; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761060; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1061; CHECK-NEXT:    store i16 [[_MSPROP1]], ptr [[TMP7]], align 21062; CHECK-NEXT:    store i16 [[TMP]], ptr [[PTR]], align 21063; CHECK-NEXT:    ret void1064;1065  %ptr = getelementptr i16, ptr %D, i64 -11066  %tmp = extractelement <4 x i16> %A, i32 01067  store i16 %tmp, ptr %ptr1068  ret void1069}1070 1071define void @st1lane_ro_4h(<4 x i16> %A, ptr %D, i64 %offset) sanitize_memory {1072; CHECK-LABEL: define void @st1lane_ro_4h(1073; CHECK-SAME: <4 x i16> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {1074; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81075; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81076; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 81077; CHECK-NEXT:    call void @llvm.donothing()1078; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]1079; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i16, ptr [[D]], i64 [[OFFSET]]1080; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i16> [[TMP3]], i32 11081; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x i16> [[A]], i32 11082; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01083; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]1084; CHECK:       4:1085; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1086; CHECK-NEXT:    unreachable1087; CHECK:       5:1088; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i641089; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761090; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1091; CHECK-NEXT:    store i16 [[_MSPROP1]], ptr [[TMP8]], align 21092; CHECK-NEXT:    store i16 [[TMP]], ptr [[PTR]], align 21093; CHECK-NEXT:    ret void1094;1095  %ptr = getelementptr i16, ptr %D, i64 %offset1096  %tmp = extractelement <4 x i16> %A, i32 11097  store i16 %tmp, ptr %ptr1098  ret void1099}1100 1101define void @st1lane0_ro_4h(<4 x i16> %A, ptr %D, i64 %offset) sanitize_memory {1102; CHECK-LABEL: define void @st1lane0_ro_4h(1103; CHECK-SAME: <4 x i16> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {1104; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81105; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81106; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 81107; CHECK-NEXT:    call void @llvm.donothing()1108; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]1109; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i16, ptr [[D]], i64 [[OFFSET]]1110; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <4 x i16> [[TMP3]], i32 01111; CHECK-NEXT:    [[TMP:%.*]] = extractelement <4 x i16> [[A]], i32 01112; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01113; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]1114; CHECK:       4:1115; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1116; CHECK-NEXT:    unreachable1117; CHECK:       5:1118; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i641119; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761120; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1121; CHECK-NEXT:    store i16 [[_MSPROP1]], ptr [[TMP8]], align 21122; CHECK-NEXT:    store i16 [[TMP]], ptr [[PTR]], align 21123; CHECK-NEXT:    ret void1124;1125  %ptr = getelementptr i16, ptr %D, i64 %offset1126  %tmp = extractelement <4 x i16> %A, i32 01127  store i16 %tmp, ptr %ptr1128  ret void1129}1130 1131define void @st1lane_2s(<2 x i32> %A, ptr %D) sanitize_memory {1132; CHECK-LABEL: define void @st1lane_2s(1133; CHECK-SAME: <2 x i32> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1134; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81135; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81136; CHECK-NEXT:    call void @llvm.donothing()1137; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01138; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, ptr [[D]], i64 11139; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i32> [[TMP2]], i32 11140; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x i32> [[A]], i32 11141; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01142; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1143; CHECK:       3:1144; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1145; CHECK-NEXT:    unreachable1146; CHECK:       4:1147; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641148; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761149; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1150; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 41151; CHECK-NEXT:    store i32 [[TMP]], ptr [[PTR]], align 41152; CHECK-NEXT:    ret void1153;1154  %ptr = getelementptr i32, ptr %D, i64 11155  %tmp = extractelement <2 x i32> %A, i32 11156  store i32 %tmp, ptr %ptr1157  ret void1158}1159 1160define void @st1lane0_2s(<2 x i32> %A, ptr %D) sanitize_memory {1161; CHECK-LABEL: define void @st1lane0_2s(1162; CHECK-SAME: <2 x i32> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1163; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81164; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81165; CHECK-NEXT:    call void @llvm.donothing()1166; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01167; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, ptr [[D]], i64 11168; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i32> [[TMP2]], i32 01169; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x i32> [[A]], i32 01170; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01171; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1172; CHECK:       3:1173; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1174; CHECK-NEXT:    unreachable1175; CHECK:       4:1176; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641177; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761178; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1179; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 41180; CHECK-NEXT:    store i32 [[TMP]], ptr [[PTR]], align 41181; CHECK-NEXT:    ret void1182;1183  %ptr = getelementptr i32, ptr %D, i64 11184  %tmp = extractelement <2 x i32> %A, i32 01185  store i32 %tmp, ptr %ptr1186  ret void1187}1188 1189define void @st1lane0u_2s(<2 x i32> %A, ptr %D) sanitize_memory {1190; CHECK-LABEL: define void @st1lane0u_2s(1191; CHECK-SAME: <2 x i32> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1192; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81193; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81194; CHECK-NEXT:    call void @llvm.donothing()1195; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01196; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, ptr [[D]], i64 -11197; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i32> [[TMP2]], i32 01198; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x i32> [[A]], i32 01199; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01200; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1201; CHECK:       3:1202; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1203; CHECK-NEXT:    unreachable1204; CHECK:       4:1205; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641206; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761207; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1208; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 41209; CHECK-NEXT:    store i32 [[TMP]], ptr [[PTR]], align 41210; CHECK-NEXT:    ret void1211;1212  %ptr = getelementptr i32, ptr %D, i64 -11213  %tmp = extractelement <2 x i32> %A, i32 01214  store i32 %tmp, ptr %ptr1215  ret void1216}1217 1218define void @st1lane_ro_2s(<2 x i32> %A, ptr %D, i64 %offset) sanitize_memory {1219; CHECK-LABEL: define void @st1lane_ro_2s(1220; CHECK-SAME: <2 x i32> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {1221; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81222; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81223; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81224; CHECK-NEXT:    call void @llvm.donothing()1225; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]1226; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, ptr [[D]], i64 [[OFFSET]]1227; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i32> [[TMP3]], i32 11228; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x i32> [[A]], i32 11229; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01230; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]1231; CHECK:       4:1232; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1233; CHECK-NEXT:    unreachable1234; CHECK:       5:1235; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i641236; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761237; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1238; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP8]], align 41239; CHECK-NEXT:    store i32 [[TMP]], ptr [[PTR]], align 41240; CHECK-NEXT:    ret void1241;1242  %ptr = getelementptr i32, ptr %D, i64 %offset1243  %tmp = extractelement <2 x i32> %A, i32 11244  store i32 %tmp, ptr %ptr1245  ret void1246}1247 1248define void @st1lane0_ro_2s(<2 x i32> %A, ptr %D, i64 %offset) sanitize_memory {1249; CHECK-LABEL: define void @st1lane0_ro_2s(1250; CHECK-SAME: <2 x i32> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {1251; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81252; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81253; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81254; CHECK-NEXT:    call void @llvm.donothing()1255; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]1256; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i32, ptr [[D]], i64 [[OFFSET]]1257; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i32> [[TMP3]], i32 01258; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x i32> [[A]], i32 01259; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01260; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]1261; CHECK:       4:1262; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1263; CHECK-NEXT:    unreachable1264; CHECK:       5:1265; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i641266; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761267; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1268; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP8]], align 41269; CHECK-NEXT:    store i32 [[TMP]], ptr [[PTR]], align 41270; CHECK-NEXT:    ret void1271;1272  %ptr = getelementptr i32, ptr %D, i64 %offset1273  %tmp = extractelement <2 x i32> %A, i32 01274  store i32 %tmp, ptr %ptr1275  ret void1276}1277 1278define void @st1lane_2s_float(<2 x float> %A, ptr %D) sanitize_memory {1279; CHECK-LABEL: define void @st1lane_2s_float(1280; CHECK-SAME: <2 x float> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1281; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81282; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81283; CHECK-NEXT:    call void @llvm.donothing()1284; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01285; CHECK-NEXT:    [[PTR:%.*]] = getelementptr float, ptr [[D]], i64 11286; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i32> [[TMP2]], i32 11287; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x float> [[A]], i32 11288; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01289; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1290; CHECK:       3:1291; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1292; CHECK-NEXT:    unreachable1293; CHECK:       4:1294; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641295; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761296; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1297; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 41298; CHECK-NEXT:    store float [[TMP]], ptr [[PTR]], align 41299; CHECK-NEXT:    ret void1300;1301  %ptr = getelementptr float, ptr %D, i64 11302  %tmp = extractelement <2 x float> %A, i32 11303  store float %tmp, ptr %ptr1304  ret void1305}1306 1307define void @st1lane0_2s_float(<2 x float> %A, ptr %D) sanitize_memory {1308; CHECK-LABEL: define void @st1lane0_2s_float(1309; CHECK-SAME: <2 x float> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1310; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81311; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81312; CHECK-NEXT:    call void @llvm.donothing()1313; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01314; CHECK-NEXT:    [[PTR:%.*]] = getelementptr float, ptr [[D]], i64 11315; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i32> [[TMP2]], i32 01316; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x float> [[A]], i32 01317; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01318; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1319; CHECK:       3:1320; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1321; CHECK-NEXT:    unreachable1322; CHECK:       4:1323; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641324; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761325; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1326; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 41327; CHECK-NEXT:    store float [[TMP]], ptr [[PTR]], align 41328; CHECK-NEXT:    ret void1329;1330  %ptr = getelementptr float, ptr %D, i64 11331  %tmp = extractelement <2 x float> %A, i32 01332  store float %tmp, ptr %ptr1333  ret void1334}1335 1336define void @st1lane0u_2s_float(<2 x float> %A, ptr %D) sanitize_memory {1337; CHECK-LABEL: define void @st1lane0u_2s_float(1338; CHECK-SAME: <2 x float> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1339; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81340; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81341; CHECK-NEXT:    call void @llvm.donothing()1342; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01343; CHECK-NEXT:    [[PTR:%.*]] = getelementptr float, ptr [[D]], i64 -11344; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i32> [[TMP2]], i32 01345; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x float> [[A]], i32 01346; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01347; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1348; CHECK:       3:1349; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1350; CHECK-NEXT:    unreachable1351; CHECK:       4:1352; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641353; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761354; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1355; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP7]], align 41356; CHECK-NEXT:    store float [[TMP]], ptr [[PTR]], align 41357; CHECK-NEXT:    ret void1358;1359  %ptr = getelementptr float, ptr %D, i64 -11360  %tmp = extractelement <2 x float> %A, i32 01361  store float %tmp, ptr %ptr1362  ret void1363}1364 1365define void @st1lane_ro_2s_float(<2 x float> %A, ptr %D, i64 %offset) sanitize_memory {1366; CHECK-LABEL: define void @st1lane_ro_2s_float(1367; CHECK-SAME: <2 x float> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {1368; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81369; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81370; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81371; CHECK-NEXT:    call void @llvm.donothing()1372; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]1373; CHECK-NEXT:    [[PTR:%.*]] = getelementptr float, ptr [[D]], i64 [[OFFSET]]1374; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i32> [[TMP3]], i32 11375; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x float> [[A]], i32 11376; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01377; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]1378; CHECK:       4:1379; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1380; CHECK-NEXT:    unreachable1381; CHECK:       5:1382; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i641383; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761384; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1385; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP8]], align 41386; CHECK-NEXT:    store float [[TMP]], ptr [[PTR]], align 41387; CHECK-NEXT:    ret void1388;1389  %ptr = getelementptr float, ptr %D, i64 %offset1390  %tmp = extractelement <2 x float> %A, i32 11391  store float %tmp, ptr %ptr1392  ret void1393}1394 1395define void @st1lane0_ro_2s_float(<2 x float> %A, ptr %D, i64 %offset) sanitize_memory {1396; CHECK-LABEL: define void @st1lane0_ro_2s_float(1397; CHECK-SAME: <2 x float> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {1398; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81399; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81400; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 81401; CHECK-NEXT:    call void @llvm.donothing()1402; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]1403; CHECK-NEXT:    [[PTR:%.*]] = getelementptr float, ptr [[D]], i64 [[OFFSET]]1404; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <2 x i32> [[TMP3]], i32 01405; CHECK-NEXT:    [[TMP:%.*]] = extractelement <2 x float> [[A]], i32 01406; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01407; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]1408; CHECK:       4:1409; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1410; CHECK-NEXT:    unreachable1411; CHECK:       5:1412; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i641413; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761414; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1415; CHECK-NEXT:    store i32 [[_MSPROP1]], ptr [[TMP8]], align 41416; CHECK-NEXT:    store float [[TMP]], ptr [[PTR]], align 41417; CHECK-NEXT:    ret void1418;1419  %ptr = getelementptr float, ptr %D, i64 %offset1420  %tmp = extractelement <2 x float> %A, i32 01421  store float %tmp, ptr %ptr1422  ret void1423}1424 1425define void @st1lane0_1d(<1 x i64> %A, ptr %D) sanitize_memory {1426; CHECK-LABEL: define void @st1lane0_1d(1427; CHECK-SAME: <1 x i64> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1428; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81429; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 81430; CHECK-NEXT:    call void @llvm.donothing()1431; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01432; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i64, ptr [[D]], i64 11433; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <1 x i64> [[TMP2]], i32 01434; CHECK-NEXT:    [[TMP:%.*]] = extractelement <1 x i64> [[A]], i32 01435; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01436; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1437; CHECK:       3:1438; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1439; CHECK-NEXT:    unreachable1440; CHECK:       4:1441; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641442; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761443; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1444; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP7]], align 81445; CHECK-NEXT:    store i64 [[TMP]], ptr [[PTR]], align 81446; CHECK-NEXT:    ret void1447;1448  %ptr = getelementptr i64, ptr %D, i64 11449  %tmp = extractelement <1 x i64> %A, i32 01450  store i64 %tmp, ptr %ptr1451  ret void1452}1453 1454define void @st1lane0u_1d(<1 x i64> %A, ptr %D) sanitize_memory {1455; CHECK-LABEL: define void @st1lane0u_1d(1456; CHECK-SAME: <1 x i64> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1457; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81458; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 81459; CHECK-NEXT:    call void @llvm.donothing()1460; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01461; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i64, ptr [[D]], i64 -11462; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <1 x i64> [[TMP2]], i32 01463; CHECK-NEXT:    [[TMP:%.*]] = extractelement <1 x i64> [[A]], i32 01464; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01465; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1466; CHECK:       3:1467; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1468; CHECK-NEXT:    unreachable1469; CHECK:       4:1470; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641471; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761472; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1473; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP7]], align 81474; CHECK-NEXT:    store i64 [[TMP]], ptr [[PTR]], align 81475; CHECK-NEXT:    ret void1476;1477  %ptr = getelementptr i64, ptr %D, i64 -11478  %tmp = extractelement <1 x i64> %A, i32 01479  store i64 %tmp, ptr %ptr1480  ret void1481}1482 1483define void @st1lane0_ro_1d(<1 x i64> %A, ptr %D, i64 %offset) sanitize_memory {1484; CHECK-LABEL: define void @st1lane0_ro_1d(1485; CHECK-SAME: <1 x i64> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {1486; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81487; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81488; CHECK-NEXT:    [[TMP3:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 81489; CHECK-NEXT:    call void @llvm.donothing()1490; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]1491; CHECK-NEXT:    [[PTR:%.*]] = getelementptr i64, ptr [[D]], i64 [[OFFSET]]1492; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <1 x i64> [[TMP3]], i32 01493; CHECK-NEXT:    [[TMP:%.*]] = extractelement <1 x i64> [[A]], i32 01494; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01495; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]1496; CHECK:       4:1497; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1498; CHECK-NEXT:    unreachable1499; CHECK:       5:1500; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i641501; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761502; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1503; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP8]], align 81504; CHECK-NEXT:    store i64 [[TMP]], ptr [[PTR]], align 81505; CHECK-NEXT:    ret void1506;1507  %ptr = getelementptr i64, ptr %D, i64 %offset1508  %tmp = extractelement <1 x i64> %A, i32 01509  store i64 %tmp, ptr %ptr1510  ret void1511}1512 1513define void @st1lane0_1d_double(<1 x double> %A, ptr %D) sanitize_memory {1514; CHECK-LABEL: define void @st1lane0_1d_double(1515; CHECK-SAME: <1 x double> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1516; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81517; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 81518; CHECK-NEXT:    call void @llvm.donothing()1519; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01520; CHECK-NEXT:    [[PTR:%.*]] = getelementptr double, ptr [[D]], i64 11521; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <1 x i64> [[TMP2]], i32 01522; CHECK-NEXT:    [[TMP:%.*]] = extractelement <1 x double> [[A]], i32 01523; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01524; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1525; CHECK:       3:1526; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1527; CHECK-NEXT:    unreachable1528; CHECK:       4:1529; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641530; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761531; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1532; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP7]], align 81533; CHECK-NEXT:    store double [[TMP]], ptr [[PTR]], align 81534; CHECK-NEXT:    ret void1535;1536  %ptr = getelementptr double, ptr %D, i64 11537  %tmp = extractelement <1 x double> %A, i32 01538  store double %tmp, ptr %ptr1539  ret void1540}1541 1542define void @st1lane0u_1d_double(<1 x double> %A, ptr %D) sanitize_memory {1543; CHECK-LABEL: define void @st1lane0u_1d_double(1544; CHECK-SAME: <1 x double> [[A:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1545; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81546; CHECK-NEXT:    [[TMP2:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 81547; CHECK-NEXT:    call void @llvm.donothing()1548; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], 01549; CHECK-NEXT:    [[PTR:%.*]] = getelementptr double, ptr [[D]], i64 -11550; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <1 x i64> [[TMP2]], i32 01551; CHECK-NEXT:    [[TMP:%.*]] = extractelement <1 x double> [[A]], i32 01552; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01553; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]1554; CHECK:       3:1555; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1556; CHECK-NEXT:    unreachable1557; CHECK:       4:1558; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[PTR]] to i641559; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761560; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1561; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP7]], align 81562; CHECK-NEXT:    store double [[TMP]], ptr [[PTR]], align 81563; CHECK-NEXT:    ret void1564;1565  %ptr = getelementptr double, ptr %D, i64 -11566  %tmp = extractelement <1 x double> %A, i32 01567  store double %tmp, ptr %ptr1568  ret void1569}1570 1571define void @st1lane0_ro_1d_double(<1 x double> %A, ptr %D, i64 %offset) sanitize_memory {1572; CHECK-LABEL: define void @st1lane0_ro_1d_double(1573; CHECK-SAME: <1 x double> [[A:%.*]], ptr [[D:%.*]], i64 [[OFFSET:%.*]]) #[[ATTR0]] {1574; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 81575; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81576; CHECK-NEXT:    [[TMP3:%.*]] = load <1 x i64>, ptr @__msan_param_tls, align 81577; CHECK-NEXT:    call void @llvm.donothing()1578; CHECK-NEXT:    [[_MSPROP:%.*]] = or i64 [[TMP1]], [[TMP2]]1579; CHECK-NEXT:    [[PTR:%.*]] = getelementptr double, ptr [[D]], i64 [[OFFSET]]1580; CHECK-NEXT:    [[_MSPROP1:%.*]] = extractelement <1 x i64> [[TMP3]], i32 01581; CHECK-NEXT:    [[TMP:%.*]] = extractelement <1 x double> [[A]], i32 01582; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[_MSPROP]], 01583; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP4:%.*]], label [[TMP5:%.*]], !prof [[PROF1]]1584; CHECK:       4:1585; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1586; CHECK-NEXT:    unreachable1587; CHECK:       5:1588; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[PTR]] to i641589; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761590; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1591; CHECK-NEXT:    store i64 [[_MSPROP1]], ptr [[TMP8]], align 81592; CHECK-NEXT:    store double [[TMP]], ptr [[PTR]], align 81593; CHECK-NEXT:    ret void1594;1595  %ptr = getelementptr double, ptr %D, i64 %offset1596  %tmp = extractelement <1 x double> %A, i32 01597  store double %tmp, ptr %ptr1598  ret void1599}1600 1601define void @st2lane_16b(<16 x i8> %A, <16 x i8> %B, ptr %D) sanitize_memory {1602; CHECK-LABEL: define void @st2lane_16b(1603; CHECK-SAME: <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1604; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81605; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 81606; CHECK-NEXT:    [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81607; CHECK-NEXT:    call void @llvm.donothing()1608; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[D]] to i641609; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761610; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1611; CHECK-NEXT:    call void @llvm.aarch64.neon.st2lane.v16i8.p0(<16 x i8> [[TMP2]], <16 x i8> [[TMP3]], i64 1, ptr [[TMP6]])1612; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01613; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]1614; CHECK:       7:1615; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1616; CHECK-NEXT:    unreachable1617; CHECK:       8:1618; CHECK-NEXT:    call void @llvm.aarch64.neon.st2lane.v16i8.p0(<16 x i8> [[A]], <16 x i8> [[B]], i64 1, ptr [[D]])1619; CHECK-NEXT:    ret void1620;1621  call void @llvm.aarch64.neon.st2lane.v16i8.p0(<16 x i8> %A, <16 x i8> %B, i64 1, ptr %D)1622  ret void1623}1624 1625define void @st2lane_8h(<8 x i16> %A, <8 x i16> %B, ptr %D) sanitize_memory {1626; CHECK-LABEL: define void @st2lane_8h(1627; CHECK-SAME: <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1628; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81629; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 81630; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81631; CHECK-NEXT:    call void @llvm.donothing()1632; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[D]] to i641633; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761634; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1635; CHECK-NEXT:    call void @llvm.aarch64.neon.st2lane.v8i16.p0(<8 x i16> [[TMP2]], <8 x i16> [[TMP3]], i64 1, ptr [[TMP6]])1636; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01637; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]1638; CHECK:       7:1639; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1640; CHECK-NEXT:    unreachable1641; CHECK:       8:1642; CHECK-NEXT:    call void @llvm.aarch64.neon.st2lane.v8i16.p0(<8 x i16> [[A]], <8 x i16> [[B]], i64 1, ptr [[D]])1643; CHECK-NEXT:    ret void1644;1645  call void @llvm.aarch64.neon.st2lane.v8i16.p0(<8 x i16> %A, <8 x i16> %B, i64 1, ptr %D)1646  ret void1647}1648 1649define void @st2lane_4s(<4 x i32> %A, <4 x i32> %B, ptr %D) sanitize_memory {1650; CHECK-LABEL: define void @st2lane_4s(1651; CHECK-SAME: <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1652; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81653; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 81654; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81655; CHECK-NEXT:    call void @llvm.donothing()1656; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[D]] to i641657; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761658; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1659; CHECK-NEXT:    call void @llvm.aarch64.neon.st2lane.v4i32.p0(<4 x i32> [[TMP2]], <4 x i32> [[TMP3]], i64 1, ptr [[TMP6]])1660; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01661; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]1662; CHECK:       7:1663; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1664; CHECK-NEXT:    unreachable1665; CHECK:       8:1666; CHECK-NEXT:    call void @llvm.aarch64.neon.st2lane.v4i32.p0(<4 x i32> [[A]], <4 x i32> [[B]], i64 1, ptr [[D]])1667; CHECK-NEXT:    ret void1668;1669  call void @llvm.aarch64.neon.st2lane.v4i32.p0(<4 x i32> %A, <4 x i32> %B, i64 1, ptr %D)1670  ret void1671}1672 1673define void @st2lane_2d(<2 x i64> %A, <2 x i64> %B, ptr %D) sanitize_memory {1674; CHECK-LABEL: define void @st2lane_2d(1675; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1676; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81677; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 81678; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81679; CHECK-NEXT:    call void @llvm.donothing()1680; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[D]] to i641681; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761682; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1683; CHECK-NEXT:    call void @llvm.aarch64.neon.st2lane.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], i64 1, ptr [[TMP6]])1684; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01685; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP7:%.*]], label [[TMP8:%.*]], !prof [[PROF1]]1686; CHECK:       7:1687; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1688; CHECK-NEXT:    unreachable1689; CHECK:       8:1690; CHECK-NEXT:    call void @llvm.aarch64.neon.st2lane.v2i64.p0(<2 x i64> [[A]], <2 x i64> [[B]], i64 1, ptr [[D]])1691; CHECK-NEXT:    ret void1692;1693  call void @llvm.aarch64.neon.st2lane.v2i64.p0(<2 x i64> %A, <2 x i64> %B, i64 1, ptr %D)1694  ret void1695}1696 1697declare void @llvm.aarch64.neon.st2lane.v16i8.p0(<16 x i8>, <16 x i8>, i64, ptr) nounwind readnone1698declare void @llvm.aarch64.neon.st2lane.v8i16.p0(<8 x i16>, <8 x i16>, i64, ptr) nounwind readnone1699declare void @llvm.aarch64.neon.st2lane.v4i32.p0(<4 x i32>, <4 x i32>, i64, ptr) nounwind readnone1700declare void @llvm.aarch64.neon.st2lane.v2i64.p0(<2 x i64>, <2 x i64>, i64, ptr) nounwind readnone1701 1702define void @st3lane_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, ptr %D) sanitize_memory {1703; CHECK-LABEL: define void @st3lane_16b(1704; CHECK-SAME: <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], <16 x i8> [[C:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1705; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81706; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 81707; CHECK-NEXT:    [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81708; CHECK-NEXT:    [[TMP4:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81709; CHECK-NEXT:    call void @llvm.donothing()1710; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[D]] to i641711; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761712; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1713; CHECK-NEXT:    call void @llvm.aarch64.neon.st3lane.v16i8.p0(<16 x i8> [[TMP2]], <16 x i8> [[TMP3]], <16 x i8> [[TMP4]], i64 1, ptr [[TMP7]])1714; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01715; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]1716; CHECK:       8:1717; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1718; CHECK-NEXT:    unreachable1719; CHECK:       9:1720; CHECK-NEXT:    call void @llvm.aarch64.neon.st3lane.v16i8.p0(<16 x i8> [[A]], <16 x i8> [[B]], <16 x i8> [[C]], i64 1, ptr [[D]])1721; CHECK-NEXT:    ret void1722;1723  call void @llvm.aarch64.neon.st3lane.v16i8.p0(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, i64 1, ptr %D)1724  ret void1725}1726 1727define void @st3lane_8h(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, ptr %D) sanitize_memory {1728; CHECK-LABEL: define void @st3lane_8h(1729; CHECK-SAME: <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], <8 x i16> [[C:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1730; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81731; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 81732; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81733; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81734; CHECK-NEXT:    call void @llvm.donothing()1735; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[D]] to i641736; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761737; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1738; CHECK-NEXT:    call void @llvm.aarch64.neon.st3lane.v8i16.p0(<8 x i16> [[TMP2]], <8 x i16> [[TMP3]], <8 x i16> [[TMP4]], i64 1, ptr [[TMP7]])1739; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01740; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]1741; CHECK:       8:1742; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1743; CHECK-NEXT:    unreachable1744; CHECK:       9:1745; CHECK-NEXT:    call void @llvm.aarch64.neon.st3lane.v8i16.p0(<8 x i16> [[A]], <8 x i16> [[B]], <8 x i16> [[C]], i64 1, ptr [[D]])1746; CHECK-NEXT:    ret void1747;1748  call void @llvm.aarch64.neon.st3lane.v8i16.p0(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, i64 1, ptr %D)1749  ret void1750}1751 1752define void @st3lane_4s(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, ptr %D) sanitize_memory {1753; CHECK-LABEL: define void @st3lane_4s(1754; CHECK-SAME: <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], <4 x i32> [[C:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1755; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81756; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 81757; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81758; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81759; CHECK-NEXT:    call void @llvm.donothing()1760; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[D]] to i641761; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761762; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1763; CHECK-NEXT:    call void @llvm.aarch64.neon.st3lane.v4i32.p0(<4 x i32> [[TMP2]], <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], i64 1, ptr [[TMP7]])1764; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01765; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]1766; CHECK:       8:1767; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1768; CHECK-NEXT:    unreachable1769; CHECK:       9:1770; CHECK-NEXT:    call void @llvm.aarch64.neon.st3lane.v4i32.p0(<4 x i32> [[A]], <4 x i32> [[B]], <4 x i32> [[C]], i64 1, ptr [[D]])1771; CHECK-NEXT:    ret void1772;1773  call void @llvm.aarch64.neon.st3lane.v4i32.p0(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, i64 1, ptr %D)1774  ret void1775}1776 1777define void @st3lane_2d(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, ptr %D) sanitize_memory {1778; CHECK-LABEL: define void @st3lane_2d(1779; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], <2 x i64> [[C:%.*]], ptr [[D:%.*]]) #[[ATTR0]] {1780; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81781; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 81782; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81783; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81784; CHECK-NEXT:    call void @llvm.donothing()1785; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[D]] to i641786; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761787; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1788; CHECK-NEXT:    call void @llvm.aarch64.neon.st3lane.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], <2 x i64> [[TMP4]], i64 1, ptr [[TMP7]])1789; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01790; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP8:%.*]], label [[TMP9:%.*]], !prof [[PROF1]]1791; CHECK:       8:1792; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1793; CHECK-NEXT:    unreachable1794; CHECK:       9:1795; CHECK-NEXT:    call void @llvm.aarch64.neon.st3lane.v2i64.p0(<2 x i64> [[A]], <2 x i64> [[B]], <2 x i64> [[C]], i64 1, ptr [[D]])1796; CHECK-NEXT:    ret void1797;1798  call void @llvm.aarch64.neon.st3lane.v2i64.p0(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, i64 1, ptr %D)1799  ret void1800}1801 1802declare void @llvm.aarch64.neon.st3lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, i64, ptr) nounwind readnone1803declare void @llvm.aarch64.neon.st3lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, i64, ptr) nounwind readnone1804declare void @llvm.aarch64.neon.st3lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, i64, ptr) nounwind readnone1805declare void @llvm.aarch64.neon.st3lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, i64, ptr) nounwind readnone1806 1807define void @st4lane_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, ptr %E) sanitize_memory {1808; CHECK-LABEL: define void @st4lane_16b(1809; CHECK-SAME: <16 x i8> [[A:%.*]], <16 x i8> [[B:%.*]], <16 x i8> [[C:%.*]], <16 x i8> [[D:%.*]], ptr [[E:%.*]]) #[[ATTR0]] {1810; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81811; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 81812; CHECK-NEXT:    [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81813; CHECK-NEXT:    [[TMP4:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81814; CHECK-NEXT:    [[TMP5:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81815; CHECK-NEXT:    call void @llvm.donothing()1816; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[E]] to i641817; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761818; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1819; CHECK-NEXT:    call void @llvm.aarch64.neon.st4lane.v16i8.p0(<16 x i8> [[TMP2]], <16 x i8> [[TMP3]], <16 x i8> [[TMP4]], <16 x i8> [[TMP5]], i64 1, ptr [[TMP8]])1820; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01821; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1822; CHECK:       9:1823; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1824; CHECK-NEXT:    unreachable1825; CHECK:       10:1826; CHECK-NEXT:    call void @llvm.aarch64.neon.st4lane.v16i8.p0(<16 x i8> [[A]], <16 x i8> [[B]], <16 x i8> [[C]], <16 x i8> [[D]], i64 1, ptr [[E]])1827; CHECK-NEXT:    ret void1828;1829  call void @llvm.aarch64.neon.st4lane.v16i8.p0(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 1, ptr %E)1830  ret void1831}1832 1833define void @st4lane_8h(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, ptr %E) sanitize_memory {1834; CHECK-LABEL: define void @st4lane_8h(1835; CHECK-SAME: <8 x i16> [[A:%.*]], <8 x i16> [[B:%.*]], <8 x i16> [[C:%.*]], <8 x i16> [[D:%.*]], ptr [[E:%.*]]) #[[ATTR0]] {1836; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81837; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 81838; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81839; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81840; CHECK-NEXT:    [[TMP5:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81841; CHECK-NEXT:    call void @llvm.donothing()1842; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[E]] to i641843; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761844; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1845; CHECK-NEXT:    call void @llvm.aarch64.neon.st4lane.v8i16.p0(<8 x i16> [[TMP2]], <8 x i16> [[TMP3]], <8 x i16> [[TMP4]], <8 x i16> [[TMP5]], i64 1, ptr [[TMP8]])1846; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01847; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1848; CHECK:       9:1849; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1850; CHECK-NEXT:    unreachable1851; CHECK:       10:1852; CHECK-NEXT:    call void @llvm.aarch64.neon.st4lane.v8i16.p0(<8 x i16> [[A]], <8 x i16> [[B]], <8 x i16> [[C]], <8 x i16> [[D]], i64 1, ptr [[E]])1853; CHECK-NEXT:    ret void1854;1855  call void @llvm.aarch64.neon.st4lane.v8i16.p0(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 1, ptr %E)1856  ret void1857}1858 1859define void @st4lane_4s(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, ptr %E) sanitize_memory {1860; CHECK-LABEL: define void @st4lane_4s(1861; CHECK-SAME: <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]], <4 x i32> [[C:%.*]], <4 x i32> [[D:%.*]], ptr [[E:%.*]]) #[[ATTR0]] {1862; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81863; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 81864; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81865; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81866; CHECK-NEXT:    [[TMP5:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81867; CHECK-NEXT:    call void @llvm.donothing()1868; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[E]] to i641869; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761870; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1871; CHECK-NEXT:    call void @llvm.aarch64.neon.st4lane.v4i32.p0(<4 x i32> [[TMP2]], <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], <4 x i32> [[TMP5]], i64 1, ptr [[TMP8]])1872; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01873; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1874; CHECK:       9:1875; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1876; CHECK-NEXT:    unreachable1877; CHECK:       10:1878; CHECK-NEXT:    call void @llvm.aarch64.neon.st4lane.v4i32.p0(<4 x i32> [[A]], <4 x i32> [[B]], <4 x i32> [[C]], <4 x i32> [[D]], i64 1, ptr [[E]])1879; CHECK-NEXT:    ret void1880;1881  call void @llvm.aarch64.neon.st4lane.v4i32.p0(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 1, ptr %E)1882  ret void1883}1884 1885define void @st4lane_2d(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, ptr %E) sanitize_memory {1886; CHECK-LABEL: define void @st4lane_2d(1887; CHECK-SAME: <2 x i64> [[A:%.*]], <2 x i64> [[B:%.*]], <2 x i64> [[C:%.*]], <2 x i64> [[D:%.*]], ptr [[E:%.*]]) #[[ATTR0]] {1888; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 64), align 81889; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 81890; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81891; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81892; CHECK-NEXT:    [[TMP5:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81893; CHECK-NEXT:    call void @llvm.donothing()1894; CHECK-NEXT:    [[TMP6:%.*]] = ptrtoint ptr [[E]] to i641895; CHECK-NEXT:    [[TMP7:%.*]] = xor i64 [[TMP6]], 1935140464885761896; CHECK-NEXT:    [[TMP8:%.*]] = inttoptr i64 [[TMP7]] to ptr1897; CHECK-NEXT:    call void @llvm.aarch64.neon.st4lane.v2i64.p0(<2 x i64> [[TMP2]], <2 x i64> [[TMP3]], <2 x i64> [[TMP4]], <2 x i64> [[TMP5]], i64 1, ptr [[TMP8]])1898; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01899; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]1900; CHECK:       9:1901; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR4]]1902; CHECK-NEXT:    unreachable1903; CHECK:       10:1904; CHECK-NEXT:    call void @llvm.aarch64.neon.st4lane.v2i64.p0(<2 x i64> [[A]], <2 x i64> [[B]], <2 x i64> [[C]], <2 x i64> [[D]], i64 1, ptr [[E]])1905; CHECK-NEXT:    ret void1906;1907  call void @llvm.aarch64.neon.st4lane.v2i64.p0(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 1, ptr %E)1908  ret void1909}1910 1911declare void @llvm.aarch64.neon.st4lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i64, ptr) nounwind readnone1912declare void @llvm.aarch64.neon.st4lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i64, ptr) nounwind readnone1913declare void @llvm.aarch64.neon.st4lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i64, ptr) nounwind readnone1914declare void @llvm.aarch64.neon.st4lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, ptr) nounwind readnone1915;.1916; CHECK: [[PROF1]] = !{!"branch_weights", i32 1, i32 1048575}1917;.1918