brintos

brintos / llvm-project-archived public Read only

0
0
Text · 297.1 KiB · 864f6a9 Raw
4052 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 42; RUN: opt < %s -passes=msan -S | FileCheck %s3;4; Forked from llvm/test/CodeGen/AArch64/arm64-ld1.ll5;6; Explicitly handled (handleNEONVectorLoad):7; - llvm.aarch64.neon.ld1x2, llvm.aarch64.neon.ld1x3, llvm.aarch64.neon.ld1x48; - llvm.aarch64.neon.ld2, llvm.aarch64.neon.ld3, llvm.aarch64.neon.ld49; - llvm.aarch64.neon.ld2lane, llvm.aarch64.neon.ld3lane, llvm.aarch64.neon.ld4lane10; - llvm.aarch64.neon.ld2r, llvm.aarch64.neon.ld3r, llvm.aarch64.neon.ld4r11 12target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"13target triple = "aarch64--linux-android9001"14 15%struct.__neon_int8x8x2_t = type { <8 x i8>,  <8 x i8> }16%struct.__neon_int8x8x3_t = type { <8 x i8>,  <8 x i8>,  <8 x i8> }17%struct.__neon_int8x8x4_t = type { <8 x i8>,  <8 x i8>, <8 x i8>,  <8 x i8> }18 19define %struct.__neon_int8x8x2_t @ld2_8b(ptr %A) nounwind #0 {20; Make sure we are loading into the results defined by the ABI (i.e., v0, v1)21; and from the argument of the function also defined by ABI (i.e., x0)22; CHECK-LABEL: define %struct.__neon_int8x8x2_t @ld2_8b(23; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0:[0-9]+]] {24; CHECK-NEXT:    call void @llvm.donothing()25; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i6426; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 19351404648857627; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr28; CHECK-NEXT:    [[TMP9:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2.v8i8.p0(ptr [[TMP3]])29; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2.v8i8.p0(ptr [[A]])30; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP9]], 031; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP4]], 032; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <8 x i8>, <8 x i8> } { <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1) }, <8 x i8> [[TMP11]], 033; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X2_T:%.*]] poison, <8 x i8> [[TMP5]], 034; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP9]], 135; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP4]], 136; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i8>, <8 x i8> } [[TMP13]], <8 x i8> [[TMP10]], 137; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X2_T]] [[TMP6]], <8 x i8> [[TMP7]], 138; CHECK-NEXT:    store { <8 x i8>, <8 x i8> } [[TMP12]], ptr @__msan_retval_tls, align 839; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X8X2_T]] [[TMP8]]40;41  %tmpvar2 = call %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld2.v8i8.p0(ptr %A)42  ret %struct.__neon_int8x8x2_t  %tmpvar243}44 45define %struct.__neon_int8x8x3_t @ld3_8b(ptr %A) nounwind #0 {46; Make sure we are using the operands defined by the ABI47; CHECK-LABEL: define %struct.__neon_int8x8x3_t @ld3_8b(48; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {49; CHECK-NEXT:    call void @llvm.donothing()50; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i6451; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 19351404648857652; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr53; CHECK-NEXT:    [[TMP11:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3.v8i8.p0(ptr [[TMP3]])54; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3.v8i8.p0(ptr [[A]])55; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP11]], 056; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 057; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8> } { <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1) }, <8 x i8> [[TMP13]], 058; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X3_T:%.*]] poison, <8 x i8> [[TMP5]], 059; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP11]], 160; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 161; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP15]], <8 x i8> [[TMP17]], 162; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X3_T]] [[TMP6]], <8 x i8> [[TMP7]], 163; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP11]], 264; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 265; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP12]], <8 x i8> [[TMP14]], 266; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X3_T]] [[TMP8]], <8 x i8> [[TMP9]], 267; CHECK-NEXT:    store { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP16]], ptr @__msan_retval_tls, align 868; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X8X3_T]] [[TMP10]]69;70  %tmpvar2 = call %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld3.v8i8.p0(ptr %A)71  ret %struct.__neon_int8x8x3_t  %tmpvar272}73 74define %struct.__neon_int8x8x4_t @ld4_8b(ptr %A) nounwind #0 {75; Make sure we are using the operands defined by the ABI76; CHECK-LABEL: define %struct.__neon_int8x8x4_t @ld4_8b(77; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {78; CHECK-NEXT:    call void @llvm.donothing()79; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i6480; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 19351404648857681; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr82; CHECK-NEXT:    [[TMP13:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr [[TMP3]])83; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4.v8i8.p0(ptr [[A]])84; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 085; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 086; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } { <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1) }, <8 x i8> [[TMP15]], 087; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T:%.*]] poison, <8 x i8> [[TMP5]], 088; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 189; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 190; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP17]], <8 x i8> [[TMP19]], 191; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T]] [[TMP6]], <8 x i8> [[TMP7]], 192; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 293; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 294; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP21]], <8 x i8> [[TMP14]], 295; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T]] [[TMP8]], <8 x i8> [[TMP9]], 296; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 397; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 398; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP16]], <8 x i8> [[TMP18]], 399; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T]] [[TMP10]], <8 x i8> [[TMP11]], 3100; CHECK-NEXT:    store { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP20]], ptr @__msan_retval_tls, align 8101; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X8X4_T]] [[TMP12]]102;103  %tmpvar2 = call %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld4.v8i8.p0(ptr %A)104  ret %struct.__neon_int8x8x4_t  %tmpvar2105}106 107declare %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld2.v8i8.p0(ptr) nounwind readonly108declare %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld3.v8i8.p0(ptr) nounwind readonly109declare %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld4.v8i8.p0(ptr) nounwind readonly110 111%struct.__neon_int8x16x2_t = type { <16 x i8>,  <16 x i8> }112%struct.__neon_int8x16x3_t = type { <16 x i8>,  <16 x i8>,  <16 x i8> }113%struct.__neon_int8x16x4_t = type { <16 x i8>,  <16 x i8>, <16 x i8>,  <16 x i8> }114 115define %struct.__neon_int8x16x2_t @ld2_16b(ptr %A) nounwind #0 {116; Make sure we are using the operands defined by the ABI117; CHECK-LABEL: define %struct.__neon_int8x16x2_t @ld2_16b(118; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {119; CHECK-NEXT:    call void @llvm.donothing()120; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64121; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576122; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr123; CHECK-NEXT:    [[TMP9:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2.v16i8.p0(ptr [[TMP3]])124; CHECK-NEXT:    [[TMP4:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2.v16i8.p0(ptr [[A]])125; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP9]], 0126; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP4]], 0127; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP11]], 0128; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X2_T:%.*]] poison, <16 x i8> [[TMP5]], 0129; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP9]], 1130; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP4]], 1131; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <16 x i8>, <16 x i8> } [[TMP13]], <16 x i8> [[TMP10]], 1132; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X2_T]] [[TMP6]], <16 x i8> [[TMP7]], 1133; CHECK-NEXT:    store { <16 x i8>, <16 x i8> } [[TMP12]], ptr @__msan_retval_tls, align 8134; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X2_T]] [[TMP8]]135;136  %tmpvar2 = call %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2.v16i8.p0(ptr %A)137  ret %struct.__neon_int8x16x2_t  %tmpvar2138}139 140define %struct.__neon_int8x16x3_t @ld3_16b(ptr %A) nounwind #0 {141; Make sure we are using the operands defined by the ABI142; CHECK-LABEL: define %struct.__neon_int8x16x3_t @ld3_16b(143; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {144; CHECK-NEXT:    call void @llvm.donothing()145; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64146; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576147; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr148; CHECK-NEXT:    [[TMP11:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3.v16i8.p0(ptr [[TMP3]])149; CHECK-NEXT:    [[TMP4:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3.v16i8.p0(ptr [[A]])150; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP11]], 0151; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 0152; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP13]], 0153; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T:%.*]] poison, <16 x i8> [[TMP5]], 0154; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP11]], 1155; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 1156; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP15]], <16 x i8> [[TMP17]], 1157; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T]] [[TMP6]], <16 x i8> [[TMP7]], 1158; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP11]], 2159; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 2160; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP12]], <16 x i8> [[TMP14]], 2161; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T]] [[TMP8]], <16 x i8> [[TMP9]], 2162; CHECK-NEXT:    store { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP16]], ptr @__msan_retval_tls, align 8163; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X3_T]] [[TMP10]]164;165  %tmpvar2 = call %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld3.v16i8.p0(ptr %A)166  ret %struct.__neon_int8x16x3_t  %tmpvar2167}168 169define %struct.__neon_int8x16x4_t @ld4_16b(ptr %A) nounwind #0 {170; Make sure we are using the operands defined by the ABI171; CHECK-LABEL: define %struct.__neon_int8x16x4_t @ld4_16b(172; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {173; CHECK-NEXT:    call void @llvm.donothing()174; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64175; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576176; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr177; CHECK-NEXT:    [[TMP13:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4.v16i8.p0(ptr [[TMP3]])178; CHECK-NEXT:    [[TMP4:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4.v16i8.p0(ptr [[A]])179; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 0180; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 0181; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP15]], 0182; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T:%.*]] poison, <16 x i8> [[TMP5]], 0183; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 1184; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 1185; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP17]], <16 x i8> [[TMP19]], 1186; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP6]], <16 x i8> [[TMP7]], 1187; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 2188; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 2189; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP21]], <16 x i8> [[TMP14]], 2190; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP8]], <16 x i8> [[TMP9]], 2191; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 3192; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 3193; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP16]], <16 x i8> [[TMP18]], 3194; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP10]], <16 x i8> [[TMP11]], 3195; CHECK-NEXT:    store { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP20]], ptr @__msan_retval_tls, align 8196; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X4_T]] [[TMP12]]197;198  %tmpvar2 = call %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld4.v16i8.p0(ptr %A)199  ret %struct.__neon_int8x16x4_t  %tmpvar2200}201 202declare %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2.v16i8.p0(ptr) nounwind readonly203declare %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld3.v16i8.p0(ptr) nounwind readonly204declare %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld4.v16i8.p0(ptr) nounwind readonly205 206%struct.__neon_int16x4x2_t = type { <4 x i16>,  <4 x i16> }207%struct.__neon_int16x4x3_t = type { <4 x i16>,  <4 x i16>,  <4 x i16> }208%struct.__neon_int16x4x4_t = type { <4 x i16>,  <4 x i16>, <4 x i16>,  <4 x i16> }209 210define %struct.__neon_int16x4x2_t @ld2_4h(ptr %A) nounwind #0 {211; Make sure we are using the operands defined by the ABI212; CHECK-LABEL: define %struct.__neon_int16x4x2_t @ld2_4h(213; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {214; CHECK-NEXT:    call void @llvm.donothing()215; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64216; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576217; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr218; CHECK-NEXT:    [[TMP9:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2.v4i16.p0(ptr [[TMP3]])219; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2.v4i16.p0(ptr [[A]])220; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP9]], 0221; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP4]], 0222; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <4 x i16>, <4 x i16> } { <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1) }, <4 x i16> [[TMP11]], 0223; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X2_T:%.*]] poison, <4 x i16> [[TMP5]], 0224; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP9]], 1225; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP4]], 1226; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i16>, <4 x i16> } [[TMP13]], <4 x i16> [[TMP10]], 1227; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X2_T]] [[TMP6]], <4 x i16> [[TMP7]], 1228; CHECK-NEXT:    store { <4 x i16>, <4 x i16> } [[TMP12]], ptr @__msan_retval_tls, align 8229; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X4X2_T]] [[TMP8]]230;231  %tmpvar2 = call %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld2.v4i16.p0(ptr %A)232  ret %struct.__neon_int16x4x2_t  %tmpvar2233}234 235define %struct.__neon_int16x4x3_t @ld3_4h(ptr %A) nounwind #0 {236; Make sure we are using the operands defined by the ABI237; CHECK-LABEL: define %struct.__neon_int16x4x3_t @ld3_4h(238; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {239; CHECK-NEXT:    call void @llvm.donothing()240; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64241; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576242; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr243; CHECK-NEXT:    [[TMP11:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3.v4i16.p0(ptr [[TMP3]])244; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3.v4i16.p0(ptr [[A]])245; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP11]], 0246; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 0247; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16> } { <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1) }, <4 x i16> [[TMP13]], 0248; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X3_T:%.*]] poison, <4 x i16> [[TMP5]], 0249; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP11]], 1250; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 1251; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP15]], <4 x i16> [[TMP17]], 1252; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X3_T]] [[TMP6]], <4 x i16> [[TMP7]], 1253; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP11]], 2254; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 2255; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP12]], <4 x i16> [[TMP14]], 2256; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X3_T]] [[TMP8]], <4 x i16> [[TMP9]], 2257; CHECK-NEXT:    store { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP16]], ptr @__msan_retval_tls, align 8258; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X4X3_T]] [[TMP10]]259;260  %tmpvar2 = call %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld3.v4i16.p0(ptr %A)261  ret %struct.__neon_int16x4x3_t  %tmpvar2262}263 264define %struct.__neon_int16x4x4_t @ld4_4h(ptr %A) nounwind #0 {265; Make sure we are using the operands defined by the ABI266; CHECK-LABEL: define %struct.__neon_int16x4x4_t @ld4_4h(267; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {268; CHECK-NEXT:    call void @llvm.donothing()269; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64270; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576271; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr272; CHECK-NEXT:    [[TMP13:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4.v4i16.p0(ptr [[TMP3]])273; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4.v4i16.p0(ptr [[A]])274; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 0275; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 0276; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } { <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1) }, <4 x i16> [[TMP15]], 0277; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T:%.*]] poison, <4 x i16> [[TMP5]], 0278; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 1279; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 1280; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP17]], <4 x i16> [[TMP19]], 1281; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T]] [[TMP6]], <4 x i16> [[TMP7]], 1282; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 2283; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 2284; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP21]], <4 x i16> [[TMP14]], 2285; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T]] [[TMP8]], <4 x i16> [[TMP9]], 2286; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 3287; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 3288; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP16]], <4 x i16> [[TMP18]], 3289; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T]] [[TMP10]], <4 x i16> [[TMP11]], 3290; CHECK-NEXT:    store { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP20]], ptr @__msan_retval_tls, align 8291; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X4X4_T]] [[TMP12]]292;293  %tmpvar2 = call %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld4.v4i16.p0(ptr %A)294  ret %struct.__neon_int16x4x4_t  %tmpvar2295}296 297declare %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld2.v4i16.p0(ptr) nounwind readonly298declare %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld3.v4i16.p0(ptr) nounwind readonly299declare %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld4.v4i16.p0(ptr) nounwind readonly300 301%struct.__neon_int16x8x2_t = type { <8 x i16>,  <8 x i16> }302%struct.__neon_int16x8x3_t = type { <8 x i16>,  <8 x i16>,  <8 x i16> }303%struct.__neon_int16x8x4_t = type { <8 x i16>,  <8 x i16>, <8 x i16>,  <8 x i16> }304 305define %struct.__neon_int16x8x2_t @ld2_8h(ptr %A) nounwind #0 {306; Make sure we are using the operands defined by the ABI307; CHECK-LABEL: define %struct.__neon_int16x8x2_t @ld2_8h(308; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {309; CHECK-NEXT:    call void @llvm.donothing()310; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64311; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576312; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr313; CHECK-NEXT:    [[TMP9:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2.v8i16.p0(ptr [[TMP3]])314; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2.v8i16.p0(ptr [[A]])315; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP9]], 0316; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP4]], 0317; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP11]], 0318; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X2_T:%.*]] poison, <8 x i16> [[TMP5]], 0319; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP9]], 1320; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP4]], 1321; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i16>, <8 x i16> } [[TMP13]], <8 x i16> [[TMP10]], 1322; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X2_T]] [[TMP6]], <8 x i16> [[TMP7]], 1323; CHECK-NEXT:    store { <8 x i16>, <8 x i16> } [[TMP12]], ptr @__msan_retval_tls, align 8324; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X2_T]] [[TMP8]]325;326  %tmpvar2 = call %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2.v8i16.p0(ptr %A)327  ret %struct.__neon_int16x8x2_t  %tmpvar2328}329 330define %struct.__neon_int16x8x3_t @ld3_8h(ptr %A) nounwind #0 {331; Make sure we are using the operands defined by the ABI332; CHECK-LABEL: define %struct.__neon_int16x8x3_t @ld3_8h(333; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {334; CHECK-NEXT:    call void @llvm.donothing()335; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64336; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576337; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr338; CHECK-NEXT:    [[TMP11:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3.v8i16.p0(ptr [[TMP3]])339; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3.v8i16.p0(ptr [[A]])340; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP11]], 0341; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 0342; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP13]], 0343; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T:%.*]] poison, <8 x i16> [[TMP5]], 0344; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP11]], 1345; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 1346; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP15]], <8 x i16> [[TMP17]], 1347; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T]] [[TMP6]], <8 x i16> [[TMP7]], 1348; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP11]], 2349; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 2350; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP12]], <8 x i16> [[TMP14]], 2351; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T]] [[TMP8]], <8 x i16> [[TMP9]], 2352; CHECK-NEXT:    store { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP16]], ptr @__msan_retval_tls, align 8353; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X3_T]] [[TMP10]]354;355  %tmpvar2 = call %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld3.v8i16.p0(ptr %A)356  ret %struct.__neon_int16x8x3_t %tmpvar2357}358 359define %struct.__neon_int16x8x4_t @ld4_8h(ptr %A) nounwind #0 {360; Make sure we are using the operands defined by the ABI361; CHECK-LABEL: define %struct.__neon_int16x8x4_t @ld4_8h(362; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {363; CHECK-NEXT:    call void @llvm.donothing()364; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64365; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576366; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr367; CHECK-NEXT:    [[TMP13:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4.v8i16.p0(ptr [[TMP3]])368; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4.v8i16.p0(ptr [[A]])369; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 0370; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 0371; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP15]], 0372; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T:%.*]] poison, <8 x i16> [[TMP5]], 0373; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 1374; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 1375; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP17]], <8 x i16> [[TMP19]], 1376; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP6]], <8 x i16> [[TMP7]], 1377; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 2378; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 2379; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP21]], <8 x i16> [[TMP14]], 2380; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP8]], <8 x i16> [[TMP9]], 2381; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 3382; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 3383; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP16]], <8 x i16> [[TMP18]], 3384; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP10]], <8 x i16> [[TMP11]], 3385; CHECK-NEXT:    store { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP20]], ptr @__msan_retval_tls, align 8386; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X4_T]] [[TMP12]]387;388  %tmpvar2 = call %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld4.v8i16.p0(ptr %A)389  ret %struct.__neon_int16x8x4_t  %tmpvar2390}391 392declare %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2.v8i16.p0(ptr) nounwind readonly393declare %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld3.v8i16.p0(ptr) nounwind readonly394declare %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld4.v8i16.p0(ptr) nounwind readonly395 396%struct.__neon_int32x2x2_t = type { <2 x i32>,  <2 x i32> }397%struct.__neon_int32x2x3_t = type { <2 x i32>,  <2 x i32>,  <2 x i32> }398%struct.__neon_int32x2x4_t = type { <2 x i32>,  <2 x i32>, <2 x i32>,  <2 x i32> }399 400define %struct.__neon_int32x2x2_t @ld2_2s(ptr %A) nounwind #0 {401; Make sure we are using the operands defined by the ABI402; CHECK-LABEL: define %struct.__neon_int32x2x2_t @ld2_2s(403; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {404; CHECK-NEXT:    call void @llvm.donothing()405; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64406; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576407; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr408; CHECK-NEXT:    [[TMP9:%.*]] = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2.v2i32.p0(ptr [[TMP3]])409; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2.v2i32.p0(ptr [[A]])410; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP9]], 0411; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP4]], 0412; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP11]], 0413; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X2_T:%.*]] poison, <2 x i32> [[TMP5]], 0414; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP9]], 1415; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP4]], 1416; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i32>, <2 x i32> } [[TMP13]], <2 x i32> [[TMP10]], 1417; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X2_T]] [[TMP6]], <2 x i32> [[TMP7]], 1418; CHECK-NEXT:    store { <2 x i32>, <2 x i32> } [[TMP12]], ptr @__msan_retval_tls, align 8419; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X2X2_T]] [[TMP8]]420;421  %tmpvar2 = call %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld2.v2i32.p0(ptr %A)422  ret %struct.__neon_int32x2x2_t  %tmpvar2423}424 425define %struct.__neon_int32x2x3_t @ld3_2s(ptr %A) nounwind #0 {426; Make sure we are using the operands defined by the ABI427; CHECK-LABEL: define %struct.__neon_int32x2x3_t @ld3_2s(428; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {429; CHECK-NEXT:    call void @llvm.donothing()430; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64431; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576432; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr433; CHECK-NEXT:    [[TMP11:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3.v2i32.p0(ptr [[TMP3]])434; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3.v2i32.p0(ptr [[A]])435; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 0436; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 0437; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP13]], 0438; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X3_T:%.*]] poison, <2 x i32> [[TMP5]], 0439; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 1440; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 1441; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP15]], <2 x i32> [[TMP17]], 1442; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X3_T]] [[TMP6]], <2 x i32> [[TMP7]], 1443; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 2444; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 2445; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP12]], <2 x i32> [[TMP14]], 2446; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X3_T]] [[TMP8]], <2 x i32> [[TMP9]], 2447; CHECK-NEXT:    store { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP16]], ptr @__msan_retval_tls, align 8448; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X2X3_T]] [[TMP10]]449;450  %tmpvar2 = call %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld3.v2i32.p0(ptr %A)451  ret %struct.__neon_int32x2x3_t  %tmpvar2452}453 454define %struct.__neon_int32x2x4_t @ld4_2s(ptr %A) nounwind #0 {455; Make sure we are using the operands defined by the ABI456; CHECK-LABEL: define %struct.__neon_int32x2x4_t @ld4_2s(457; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {458; CHECK-NEXT:    call void @llvm.donothing()459; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64460; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576461; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr462; CHECK-NEXT:    [[TMP13:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4.v2i32.p0(ptr [[TMP3]])463; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4.v2i32.p0(ptr [[A]])464; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 0465; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 0466; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP15]], 0467; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T:%.*]] poison, <2 x i32> [[TMP5]], 0468; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 1469; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 1470; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP17]], <2 x i32> [[TMP19]], 1471; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T]] [[TMP6]], <2 x i32> [[TMP7]], 1472; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 2473; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 2474; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP21]], <2 x i32> [[TMP14]], 2475; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T]] [[TMP8]], <2 x i32> [[TMP9]], 2476; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 3477; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 3478; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP16]], <2 x i32> [[TMP18]], 3479; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T]] [[TMP10]], <2 x i32> [[TMP11]], 3480; CHECK-NEXT:    store { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP20]], ptr @__msan_retval_tls, align 8481; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X2X4_T]] [[TMP12]]482;483  %tmpvar2 = call %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld4.v2i32.p0(ptr %A)484  ret %struct.__neon_int32x2x4_t  %tmpvar2485}486 487declare %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld2.v2i32.p0(ptr) nounwind readonly488declare %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld3.v2i32.p0(ptr) nounwind readonly489declare %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld4.v2i32.p0(ptr) nounwind readonly490 491%struct.__neon_int32x4x2_t = type { <4 x i32>,  <4 x i32> }492%struct.__neon_int32x4x3_t = type { <4 x i32>,  <4 x i32>,  <4 x i32> }493%struct.__neon_int32x4x4_t = type { <4 x i32>,  <4 x i32>, <4 x i32>,  <4 x i32> }494 495define %struct.__neon_int32x4x2_t @ld2_4s(ptr %A) nounwind #0 {496; Make sure we are using the operands defined by the ABI497; CHECK-LABEL: define %struct.__neon_int32x4x2_t @ld2_4s(498; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {499; CHECK-NEXT:    call void @llvm.donothing()500; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64501; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576502; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr503; CHECK-NEXT:    [[TMP9:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0(ptr [[TMP3]])504; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2.v4i32.p0(ptr [[A]])505; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP9]], 0506; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP4]], 0507; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP11]], 0508; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X2_T:%.*]] poison, <4 x i32> [[TMP5]], 0509; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP9]], 1510; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP4]], 1511; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i32>, <4 x i32> } [[TMP13]], <4 x i32> [[TMP10]], 1512; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X2_T]] [[TMP6]], <4 x i32> [[TMP7]], 1513; CHECK-NEXT:    store { <4 x i32>, <4 x i32> } [[TMP12]], ptr @__msan_retval_tls, align 8514; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X2_T]] [[TMP8]]515;516  %tmpvar2 = call %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2.v4i32.p0(ptr %A)517  ret %struct.__neon_int32x4x2_t  %tmpvar2518}519 520define %struct.__neon_int32x4x3_t @ld3_4s(ptr %A) nounwind #0 {521; Make sure we are using the operands defined by the ABI522; CHECK-LABEL: define %struct.__neon_int32x4x3_t @ld3_4s(523; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {524; CHECK-NEXT:    call void @llvm.donothing()525; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64526; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576527; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr528; CHECK-NEXT:    [[TMP11:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3.v4i32.p0(ptr [[TMP3]])529; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3.v4i32.p0(ptr [[A]])530; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 0531; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 0532; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP13]], 0533; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T:%.*]] poison, <4 x i32> [[TMP5]], 0534; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 1535; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 1536; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP15]], <4 x i32> [[TMP17]], 1537; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T]] [[TMP6]], <4 x i32> [[TMP7]], 1538; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 2539; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 2540; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP12]], <4 x i32> [[TMP14]], 2541; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T]] [[TMP8]], <4 x i32> [[TMP9]], 2542; CHECK-NEXT:    store { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP16]], ptr @__msan_retval_tls, align 8543; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X3_T]] [[TMP10]]544;545  %tmpvar2 = call %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld3.v4i32.p0(ptr %A)546  ret %struct.__neon_int32x4x3_t  %tmpvar2547}548 549define %struct.__neon_int32x4x4_t @ld4_4s(ptr %A) nounwind #0 {550; Make sure we are using the operands defined by the ABI551; CHECK-LABEL: define %struct.__neon_int32x4x4_t @ld4_4s(552; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {553; CHECK-NEXT:    call void @llvm.donothing()554; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64555; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576556; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr557; CHECK-NEXT:    [[TMP13:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4.v4i32.p0(ptr [[TMP3]])558; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4.v4i32.p0(ptr [[A]])559; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 0560; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 0561; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP15]], 0562; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T:%.*]] poison, <4 x i32> [[TMP5]], 0563; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 1564; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 1565; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP17]], <4 x i32> [[TMP19]], 1566; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP6]], <4 x i32> [[TMP7]], 1567; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 2568; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 2569; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP21]], <4 x i32> [[TMP14]], 2570; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP8]], <4 x i32> [[TMP9]], 2571; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 3572; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 3573; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP16]], <4 x i32> [[TMP18]], 3574; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP10]], <4 x i32> [[TMP11]], 3575; CHECK-NEXT:    store { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP20]], ptr @__msan_retval_tls, align 8576; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X4_T]] [[TMP12]]577;578  %tmpvar2 = call %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld4.v4i32.p0(ptr %A)579  ret %struct.__neon_int32x4x4_t  %tmpvar2580}581 582declare %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2.v4i32.p0(ptr) nounwind readonly583declare %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld3.v4i32.p0(ptr) nounwind readonly584declare %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld4.v4i32.p0(ptr) nounwind readonly585 586%struct.__neon_int64x2x2_t = type { <2 x i64>,  <2 x i64> }587%struct.__neon_int64x2x3_t = type { <2 x i64>,  <2 x i64>,  <2 x i64> }588%struct.__neon_int64x2x4_t = type { <2 x i64>,  <2 x i64>, <2 x i64>,  <2 x i64> }589 590define %struct.__neon_int64x2x2_t @ld2_2d(ptr %A) nounwind #0 {591; Make sure we are using the operands defined by the ABI592; CHECK-LABEL: define %struct.__neon_int64x2x2_t @ld2_2d(593; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {594; CHECK-NEXT:    call void @llvm.donothing()595; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64596; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576597; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr598; CHECK-NEXT:    [[TMP9:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2.v2i64.p0(ptr [[TMP3]])599; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2.v2i64.p0(ptr [[A]])600; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP9]], 0601; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP4]], 0602; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP11]], 0603; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X2_T:%.*]] poison, <2 x i64> [[TMP5]], 0604; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP9]], 1605; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP4]], 1606; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i64>, <2 x i64> } [[TMP13]], <2 x i64> [[TMP10]], 1607; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X2_T]] [[TMP6]], <2 x i64> [[TMP7]], 1608; CHECK-NEXT:    store { <2 x i64>, <2 x i64> } [[TMP12]], ptr @__msan_retval_tls, align 8609; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X2_T]] [[TMP8]]610;611  %tmpvar2 = call %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2.v2i64.p0(ptr %A)612  ret %struct.__neon_int64x2x2_t  %tmpvar2613}614 615define %struct.__neon_int64x2x3_t @ld3_2d(ptr %A) nounwind #0 {616; Make sure we are using the operands defined by the ABI617; CHECK-LABEL: define %struct.__neon_int64x2x3_t @ld3_2d(618; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {619; CHECK-NEXT:    call void @llvm.donothing()620; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64621; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576622; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr623; CHECK-NEXT:    [[TMP11:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3.v2i64.p0(ptr [[TMP3]])624; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3.v2i64.p0(ptr [[A]])625; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 0626; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 0627; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP13]], 0628; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T:%.*]] poison, <2 x i64> [[TMP5]], 0629; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 1630; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 1631; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP15]], <2 x i64> [[TMP17]], 1632; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T]] [[TMP6]], <2 x i64> [[TMP7]], 1633; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 2634; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 2635; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP12]], <2 x i64> [[TMP14]], 2636; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T]] [[TMP8]], <2 x i64> [[TMP9]], 2637; CHECK-NEXT:    store { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP16]], ptr @__msan_retval_tls, align 8638; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X3_T]] [[TMP10]]639;640  %tmpvar2 = call %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld3.v2i64.p0(ptr %A)641  ret %struct.__neon_int64x2x3_t  %tmpvar2642}643 644define %struct.__neon_int64x2x4_t @ld4_2d(ptr %A) nounwind #0 {645; Make sure we are using the operands defined by the ABI646; CHECK-LABEL: define %struct.__neon_int64x2x4_t @ld4_2d(647; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {648; CHECK-NEXT:    call void @llvm.donothing()649; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64650; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576651; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr652; CHECK-NEXT:    [[TMP13:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4.v2i64.p0(ptr [[TMP3]])653; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4.v2i64.p0(ptr [[A]])654; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 0655; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 0656; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP15]], 0657; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T:%.*]] poison, <2 x i64> [[TMP5]], 0658; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 1659; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 1660; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP17]], <2 x i64> [[TMP19]], 1661; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP6]], <2 x i64> [[TMP7]], 1662; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 2663; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 2664; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP21]], <2 x i64> [[TMP14]], 2665; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP8]], <2 x i64> [[TMP9]], 2666; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 3667; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 3668; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP16]], <2 x i64> [[TMP18]], 3669; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP10]], <2 x i64> [[TMP11]], 3670; CHECK-NEXT:    store { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP20]], ptr @__msan_retval_tls, align 8671; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X4_T]] [[TMP12]]672;673  %tmpvar2 = call %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld4.v2i64.p0(ptr %A)674  ret %struct.__neon_int64x2x4_t  %tmpvar2675}676 677declare %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2.v2i64.p0(ptr) nounwind readonly678declare %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld3.v2i64.p0(ptr) nounwind readonly679declare %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld4.v2i64.p0(ptr) nounwind readonly680 681%struct.__neon_int64x1x2_t = type { <1 x i64>,  <1 x i64> }682%struct.__neon_int64x1x3_t = type { <1 x i64>,  <1 x i64>, <1 x i64> }683%struct.__neon_int64x1x4_t = type { <1 x i64>,  <1 x i64>, <1 x i64>, <1 x i64> }684 685 686define %struct.__neon_int64x1x2_t @ld2_1di64(ptr %A) nounwind #0 {687; Make sure we are using the operands defined by the ABI688; CHECK-LABEL: define %struct.__neon_int64x1x2_t @ld2_1di64(689; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {690; CHECK-NEXT:    call void @llvm.donothing()691; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64692; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576693; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr694; CHECK-NEXT:    [[TMP9:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0(ptr [[TMP3]])695; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0(ptr [[A]])696; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP9]], 0697; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP4]], 0698; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP11]], 0699; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X2_T:%.*]] poison, <1 x i64> [[TMP5]], 0700; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP9]], 1701; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP4]], 1702; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <1 x i64>, <1 x i64> } [[TMP13]], <1 x i64> [[TMP10]], 1703; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X2_T]] [[TMP6]], <1 x i64> [[TMP7]], 1704; CHECK-NEXT:    store { <1 x i64>, <1 x i64> } [[TMP12]], ptr @__msan_retval_tls, align 8705; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X1X2_T]] [[TMP8]]706;707  %tmpvar2 = call %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld2.v1i64.p0(ptr %A)708  ret %struct.__neon_int64x1x2_t  %tmpvar2709}710 711define %struct.__neon_int64x1x3_t @ld3_1di64(ptr %A) nounwind #0 {712; Make sure we are using the operands defined by the ABI713; CHECK-LABEL: define %struct.__neon_int64x1x3_t @ld3_1di64(714; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {715; CHECK-NEXT:    call void @llvm.donothing()716; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64717; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576718; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr719; CHECK-NEXT:    [[TMP11:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0(ptr [[TMP3]])720; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0(ptr [[A]])721; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 0722; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 0723; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP13]], 0724; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X3_T:%.*]] poison, <1 x i64> [[TMP5]], 0725; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 1726; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 1727; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP15]], <1 x i64> [[TMP17]], 1728; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X3_T]] [[TMP6]], <1 x i64> [[TMP7]], 1729; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 2730; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 2731; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP12]], <1 x i64> [[TMP14]], 2732; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X3_T]] [[TMP8]], <1 x i64> [[TMP9]], 2733; CHECK-NEXT:    store { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP16]], ptr @__msan_retval_tls, align 8734; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X1X3_T]] [[TMP10]]735;736  %tmpvar2 = call %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld3.v1i64.p0(ptr %A)737  ret %struct.__neon_int64x1x3_t  %tmpvar2738}739 740define %struct.__neon_int64x1x4_t @ld4_1di64(ptr %A) nounwind #0 {741; Make sure we are using the operands defined by the ABI742; CHECK-LABEL: define %struct.__neon_int64x1x4_t @ld4_1di64(743; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {744; CHECK-NEXT:    call void @llvm.donothing()745; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64746; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576747; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr748; CHECK-NEXT:    [[TMP13:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0(ptr [[TMP3]])749; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0(ptr [[A]])750; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 0751; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 0752; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP15]], 0753; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T:%.*]] poison, <1 x i64> [[TMP5]], 0754; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 1755; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 1756; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP17]], <1 x i64> [[TMP19]], 1757; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T]] [[TMP6]], <1 x i64> [[TMP7]], 1758; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 2759; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 2760; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP21]], <1 x i64> [[TMP14]], 2761; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T]] [[TMP8]], <1 x i64> [[TMP9]], 2762; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 3763; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 3764; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP16]], <1 x i64> [[TMP18]], 3765; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T]] [[TMP10]], <1 x i64> [[TMP11]], 3766; CHECK-NEXT:    store { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP20]], ptr @__msan_retval_tls, align 8767; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X1X4_T]] [[TMP12]]768;769  %tmpvar2 = call %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld4.v1i64.p0(ptr %A)770  ret %struct.__neon_int64x1x4_t  %tmpvar2771}772 773 774declare %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld2.v1i64.p0(ptr) nounwind readonly775declare %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld3.v1i64.p0(ptr) nounwind readonly776declare %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld4.v1i64.p0(ptr) nounwind readonly777 778%struct.__neon_float64x1x2_t = type { <1 x double>,  <1 x double> }779%struct.__neon_float64x1x3_t = type { <1 x double>,  <1 x double>, <1 x double> }780%struct.__neon_float64x1x4_t = type { <1 x double>,  <1 x double>, <1 x double>, <1 x double> }781 782 783define %struct.__neon_float64x1x2_t @ld2_1df64(ptr %A) nounwind #0 {784; Make sure we are using the operands defined by the ABI785; CHECK-LABEL: define %struct.__neon_float64x1x2_t @ld2_1df64(786; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {787; CHECK-NEXT:    call void @llvm.donothing()788; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64789; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576790; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr791; CHECK-NEXT:    [[TMP9:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2.v1i64.p0(ptr [[TMP3]])792; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld2.v1f64.p0(ptr [[A]])793; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP9]], 0794; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x double>, <1 x double> } [[TMP4]], 0795; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP11]], 0796; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X2_T:%.*]] poison, <1 x double> [[TMP5]], 0797; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP9]], 1798; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x double>, <1 x double> } [[TMP4]], 1799; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <1 x i64>, <1 x i64> } [[TMP13]], <1 x i64> [[TMP10]], 1800; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X2_T]] [[TMP6]], <1 x double> [[TMP7]], 1801; CHECK-NEXT:    store { <1 x i64>, <1 x i64> } [[TMP12]], ptr @__msan_retval_tls, align 8802; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT64X1X2_T]] [[TMP8]]803;804  %tmpvar2 = call %struct.__neon_float64x1x2_t @llvm.aarch64.neon.ld2.v1f64.p0(ptr %A)805  ret %struct.__neon_float64x1x2_t  %tmpvar2806}807 808define %struct.__neon_float64x1x3_t @ld3_1df64(ptr %A) nounwind #0 {809; Make sure we are using the operands defined by the ABI810; CHECK-LABEL: define %struct.__neon_float64x1x3_t @ld3_1df64(811; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {812; CHECK-NEXT:    call void @llvm.donothing()813; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64814; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576815; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr816; CHECK-NEXT:    [[TMP11:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3.v1i64.p0(ptr [[TMP3]])817; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld3.v1f64.p0(ptr [[A]])818; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 0819; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 0820; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP13]], 0821; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X3_T:%.*]] poison, <1 x double> [[TMP5]], 0822; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 1823; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 1824; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP15]], <1 x i64> [[TMP17]], 1825; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X3_T]] [[TMP6]], <1 x double> [[TMP7]], 1826; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 2827; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 2828; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP12]], <1 x i64> [[TMP14]], 2829; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X3_T]] [[TMP8]], <1 x double> [[TMP9]], 2830; CHECK-NEXT:    store { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP16]], ptr @__msan_retval_tls, align 8831; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT64X1X3_T]] [[TMP10]]832;833  %tmpvar2 = call %struct.__neon_float64x1x3_t @llvm.aarch64.neon.ld3.v1f64.p0(ptr %A)834  ret %struct.__neon_float64x1x3_t  %tmpvar2835}836 837define %struct.__neon_float64x1x4_t @ld4_1df64(ptr %A) nounwind #0 {838; Make sure we are using the operands defined by the ABI839; CHECK-LABEL: define %struct.__neon_float64x1x4_t @ld4_1df64(840; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {841; CHECK-NEXT:    call void @llvm.donothing()842; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i64843; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 193514046488576844; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr845; CHECK-NEXT:    [[TMP13:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4.v1i64.p0(ptr [[TMP3]])846; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld4.v1f64.p0(ptr [[A]])847; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 0848; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 0849; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP15]], 0850; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X4_T:%.*]] poison, <1 x double> [[TMP5]], 0851; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 1852; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 1853; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP17]], <1 x i64> [[TMP19]], 1854; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X4_T]] [[TMP6]], <1 x double> [[TMP7]], 1855; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 2856; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 2857; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP21]], <1 x i64> [[TMP14]], 2858; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X4_T]] [[TMP8]], <1 x double> [[TMP9]], 2859; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 3860; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 3861; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP16]], <1 x i64> [[TMP18]], 3862; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X4_T]] [[TMP10]], <1 x double> [[TMP11]], 3863; CHECK-NEXT:    store { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP20]], ptr @__msan_retval_tls, align 8864; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT64X1X4_T]] [[TMP12]]865;866  %tmpvar2 = call %struct.__neon_float64x1x4_t @llvm.aarch64.neon.ld4.v1f64.p0(ptr %A)867  ret %struct.__neon_float64x1x4_t  %tmpvar2868}869 870declare %struct.__neon_float64x1x2_t @llvm.aarch64.neon.ld2.v1f64.p0(ptr) nounwind readonly871declare %struct.__neon_float64x1x3_t @llvm.aarch64.neon.ld3.v1f64.p0(ptr) nounwind readonly872declare %struct.__neon_float64x1x4_t @llvm.aarch64.neon.ld4.v1f64.p0(ptr) nounwind readonly873 874 875define %struct.__neon_int8x16x2_t @ld2lane_16b(<16 x i8> %L1, <16 x i8> %L2, ptr %A) nounwind #0 {876; Make sure we are using the operands defined by the ABI877; CHECK-LABEL: define %struct.__neon_int8x16x2_t @ld2lane_16b(878; CHECK-SAME: <16 x i8> [[L1:%.*]], <16 x i8> [[L2:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {879; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 8880; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8881; CHECK-NEXT:    call void @llvm.donothing()882; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[A]] to i64883; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 193514046488576884; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr885; CHECK-NEXT:    [[TMP6:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8> [[TMP1]], <16 x i8> [[TMP2]], i64 1, ptr [[TMP5]])886; CHECK-NEXT:    [[TMP8:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8> [[L1]], <16 x i8> [[L2]], i64 1, ptr [[A]])887; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP6]], 0888; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP8]], 0889; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP13]], 0890; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X2_T:%.*]] poison, <16 x i8> [[TMP9]], 0891; CHECK-NEXT:    [[TMP16:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP6]], 1892; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP8]], 1893; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue { <16 x i8>, <16 x i8> } [[TMP15]], <16 x i8> [[TMP16]], 1894; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X2_T]] [[TMP10]], <16 x i8> [[TMP11]], 1895; CHECK-NEXT:    store { <16 x i8>, <16 x i8> } [[TMP14]], ptr @__msan_retval_tls, align 8896; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X2_T]] [[TMP12]]897;898  %tmpvar2 = call %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8> %L1, <16 x i8> %L2, i64 1, ptr %A)899  ret %struct.__neon_int8x16x2_t  %tmpvar2900}901 902define %struct.__neon_int8x16x3_t @ld3lane_16b(<16 x i8> %L1, <16 x i8> %L2, <16 x i8> %L3, ptr %A) nounwind #0 {903; Make sure we are using the operands defined by the ABI904; CHECK-LABEL: define %struct.__neon_int8x16x3_t @ld3lane_16b(905; CHECK-SAME: <16 x i8> [[L1:%.*]], <16 x i8> [[L2:%.*]], <16 x i8> [[L3:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {906; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 8907; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8908; CHECK-NEXT:    [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8909; CHECK-NEXT:    call void @llvm.donothing()910; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i64911; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 193514046488576912; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr913; CHECK-NEXT:    [[TMP7:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3lane.v16i8.p0(<16 x i8> [[TMP1]], <16 x i8> [[TMP2]], <16 x i8> [[TMP3]], i64 1, ptr [[TMP6]])914; CHECK-NEXT:    [[TMP10:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3lane.v16i8.p0(<16 x i8> [[L1]], <16 x i8> [[L2]], <16 x i8> [[L3]], i64 1, ptr [[A]])915; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP7]], 0916; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP10]], 0917; CHECK-NEXT:    [[TMP18:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP9]], 0918; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T:%.*]] poison, <16 x i8> [[TMP11]], 0919; CHECK-NEXT:    [[TMP20:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP7]], 1920; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP10]], 1921; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP18]], <16 x i8> [[TMP20]], 1922; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T]] [[TMP12]], <16 x i8> [[TMP13]], 1923; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP7]], 2924; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP10]], 2925; CHECK-NEXT:    [[TMP19:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP21]], <16 x i8> [[TMP17]], 2926; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T]] [[TMP14]], <16 x i8> [[TMP15]], 2927; CHECK-NEXT:    store { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP19]], ptr @__msan_retval_tls, align 8928; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X3_T]] [[TMP16]]929;930  %tmpvar2 = call %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld3lane.v16i8.p0(<16 x i8> %L1, <16 x i8> %L2, <16 x i8> %L3, i64 1, ptr %A)931  ret %struct.__neon_int8x16x3_t  %tmpvar2932}933 934define %struct.__neon_int8x16x4_t @ld4lane_16b(<16 x i8> %L1, <16 x i8> %L2, <16 x i8> %L3, <16 x i8> %L4, ptr %A) nounwind #0 {935; Make sure we are using the operands defined by the ABI936; CHECK-LABEL: define %struct.__neon_int8x16x4_t @ld4lane_16b(937; CHECK-SAME: <16 x i8> [[L1:%.*]], <16 x i8> [[L2:%.*]], <16 x i8> [[L3:%.*]], <16 x i8> [[L4:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {938; CHECK-NEXT:    [[TMP1:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 8939; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8940; CHECK-NEXT:    [[TMP3:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 8941; CHECK-NEXT:    [[TMP4:%.*]] = load <16 x i8>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 8942; CHECK-NEXT:    call void @llvm.donothing()943; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i64944; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 193514046488576945; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr946; CHECK-NEXT:    [[TMP8:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4lane.v16i8.p0(<16 x i8> [[TMP1]], <16 x i8> [[TMP2]], <16 x i8> [[TMP3]], <16 x i8> [[TMP4]], i64 1, ptr [[TMP7]])947; CHECK-NEXT:    [[TMP12:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4lane.v16i8.p0(<16 x i8> [[L1]], <16 x i8> [[L2]], <16 x i8> [[L3]], <16 x i8> [[L4]], i64 1, ptr [[A]])948; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP8]], 0949; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP12]], 0950; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP10]], 0951; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T:%.*]] poison, <16 x i8> [[TMP13]], 0952; CHECK-NEXT:    [[TMP23:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP8]], 1953; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP12]], 1954; CHECK-NEXT:    [[TMP25:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP21]], <16 x i8> [[TMP23]], 1955; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP14]], <16 x i8> [[TMP15]], 1956; CHECK-NEXT:    [[TMP26:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP8]], 2957; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP12]], 2958; CHECK-NEXT:    [[TMP27:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP25]], <16 x i8> [[TMP26]], 2959; CHECK-NEXT:    [[TMP18:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP16]], <16 x i8> [[TMP17]], 2960; CHECK-NEXT:    [[TMP22:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP8]], 3961; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP12]], 3962; CHECK-NEXT:    [[TMP24:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP27]], <16 x i8> [[TMP22]], 3963; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP18]], <16 x i8> [[TMP19]], 3964; CHECK-NEXT:    store { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP24]], ptr @__msan_retval_tls, align 8965; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X4_T]] [[TMP20]]966;967  %tmpvar2 = call %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld4lane.v16i8.p0(<16 x i8> %L1, <16 x i8> %L2, <16 x i8> %L3, <16 x i8> %L4, i64 1, ptr %A)968  ret %struct.__neon_int8x16x4_t  %tmpvar2969}970 971declare %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8>, <16 x i8>, i64, ptr) nounwind readonly972declare %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld3lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, i64, ptr) nounwind readonly973declare %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld4lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i64, ptr) nounwind readonly974 975define %struct.__neon_int16x8x2_t @ld2lane_8h(<8 x i16> %L1, <8 x i16> %L2, ptr %A) nounwind #0 {976; Make sure we are using the operands defined by the ABI977; CHECK-LABEL: define %struct.__neon_int16x8x2_t @ld2lane_8h(978; CHECK-SAME: <8 x i16> [[L1:%.*]], <8 x i16> [[L2:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {979; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8980; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 8981; CHECK-NEXT:    call void @llvm.donothing()982; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[A]] to i64983; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 193514046488576984; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr985; CHECK-NEXT:    [[TMP6:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16> [[TMP1]], <8 x i16> [[TMP2]], i64 1, ptr [[TMP5]])986; CHECK-NEXT:    [[TMP8:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16> [[L1]], <8 x i16> [[L2]], i64 1, ptr [[A]])987; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP6]], 0988; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP8]], 0989; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP13]], 0990; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X2_T:%.*]] poison, <8 x i16> [[TMP9]], 0991; CHECK-NEXT:    [[TMP16:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP6]], 1992; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP8]], 1993; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue { <8 x i16>, <8 x i16> } [[TMP15]], <8 x i16> [[TMP16]], 1994; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X2_T]] [[TMP10]], <8 x i16> [[TMP11]], 1995; CHECK-NEXT:    store { <8 x i16>, <8 x i16> } [[TMP14]], ptr @__msan_retval_tls, align 8996; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X2_T]] [[TMP12]]997;998  %tmpvar2 = call %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16> %L1, <8 x i16> %L2, i64 1, ptr %A)999  ret %struct.__neon_int16x8x2_t  %tmpvar21000}1001 1002define %struct.__neon_int16x8x3_t @ld3lane_8h(<8 x i16> %L1, <8 x i16> %L2, <8 x i16> %L3, ptr %A) nounwind #0 {1003; Make sure we are using the operands defined by the ABI1004; CHECK-LABEL: define %struct.__neon_int16x8x3_t @ld3lane_8h(1005; CHECK-SAME: <8 x i16> [[L1:%.*]], <8 x i16> [[L2:%.*]], <8 x i16> [[L3:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {1006; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 81007; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81008; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81009; CHECK-NEXT:    call void @llvm.donothing()1010; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i641011; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761012; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1013; CHECK-NEXT:    [[TMP7:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3lane.v8i16.p0(<8 x i16> [[TMP1]], <8 x i16> [[TMP2]], <8 x i16> [[TMP3]], i64 1, ptr [[TMP6]])1014; CHECK-NEXT:    [[TMP10:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3lane.v8i16.p0(<8 x i16> [[L1]], <8 x i16> [[L2]], <8 x i16> [[L3]], i64 1, ptr [[A]])1015; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP7]], 01016; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP10]], 01017; CHECK-NEXT:    [[TMP18:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP9]], 01018; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T:%.*]] poison, <8 x i16> [[TMP11]], 01019; CHECK-NEXT:    [[TMP20:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP7]], 11020; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP10]], 11021; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP18]], <8 x i16> [[TMP20]], 11022; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T]] [[TMP12]], <8 x i16> [[TMP13]], 11023; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP7]], 21024; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP10]], 21025; CHECK-NEXT:    [[TMP19:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP21]], <8 x i16> [[TMP17]], 21026; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T]] [[TMP14]], <8 x i16> [[TMP15]], 21027; CHECK-NEXT:    store { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP19]], ptr @__msan_retval_tls, align 81028; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X3_T]] [[TMP16]]1029;1030  %tmpvar2 = call %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld3lane.v8i16.p0(<8 x i16> %L1, <8 x i16> %L2, <8 x i16> %L3, i64 1, ptr %A)1031  ret %struct.__neon_int16x8x3_t  %tmpvar21032}1033 1034define %struct.__neon_int16x8x4_t @ld4lane_8h(<8 x i16> %L1, <8 x i16> %L2, <8 x i16> %L3, <8 x i16> %L4, ptr %A) nounwind #0 {1035; Make sure we are using the operands defined by the ABI1036; CHECK-LABEL: define %struct.__neon_int16x8x4_t @ld4lane_8h(1037; CHECK-SAME: <8 x i16> [[L1:%.*]], <8 x i16> [[L2:%.*]], <8 x i16> [[L3:%.*]], <8 x i16> [[L4:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {1038; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 81039; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81040; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81041; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i16>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81042; CHECK-NEXT:    call void @llvm.donothing()1043; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i641044; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761045; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1046; CHECK-NEXT:    [[TMP8:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4lane.v8i16.p0(<8 x i16> [[TMP1]], <8 x i16> [[TMP2]], <8 x i16> [[TMP3]], <8 x i16> [[TMP4]], i64 1, ptr [[TMP7]])1047; CHECK-NEXT:    [[TMP12:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4lane.v8i16.p0(<8 x i16> [[L1]], <8 x i16> [[L2]], <8 x i16> [[L3]], <8 x i16> [[L4]], i64 1, ptr [[A]])1048; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP8]], 01049; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP12]], 01050; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP10]], 01051; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T:%.*]] poison, <8 x i16> [[TMP13]], 01052; CHECK-NEXT:    [[TMP23:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP8]], 11053; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP12]], 11054; CHECK-NEXT:    [[TMP25:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP21]], <8 x i16> [[TMP23]], 11055; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP14]], <8 x i16> [[TMP15]], 11056; CHECK-NEXT:    [[TMP26:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP8]], 21057; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP12]], 21058; CHECK-NEXT:    [[TMP27:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP25]], <8 x i16> [[TMP26]], 21059; CHECK-NEXT:    [[TMP18:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP16]], <8 x i16> [[TMP17]], 21060; CHECK-NEXT:    [[TMP22:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP8]], 31061; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP12]], 31062; CHECK-NEXT:    [[TMP24:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP27]], <8 x i16> [[TMP22]], 31063; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP18]], <8 x i16> [[TMP19]], 31064; CHECK-NEXT:    store { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP24]], ptr @__msan_retval_tls, align 81065; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X4_T]] [[TMP20]]1066;1067  %tmpvar2 = call %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld4lane.v8i16.p0(<8 x i16> %L1, <8 x i16> %L2, <8 x i16> %L3, <8 x i16> %L4, i64 1, ptr %A)1068  ret %struct.__neon_int16x8x4_t  %tmpvar21069}1070 1071declare %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16>, <8 x i16>, i64, ptr) nounwind readonly1072declare %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld3lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, i64, ptr) nounwind readonly1073declare %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld4lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i64, ptr) nounwind readonly1074 1075define %struct.__neon_int32x4x2_t @ld2lane_4s(<4 x i32> %L1, <4 x i32> %L2, ptr %A) nounwind #0 {1076; Make sure we are using the operands defined by the ABI1077; CHECK-LABEL: define %struct.__neon_int32x4x2_t @ld2lane_4s(1078; CHECK-SAME: <4 x i32> [[L1:%.*]], <4 x i32> [[L2:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {1079; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 81080; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81081; CHECK-NEXT:    call void @llvm.donothing()1082; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[A]] to i641083; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 1935140464885761084; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr1085; CHECK-NEXT:    [[TMP6:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32> [[TMP1]], <4 x i32> [[TMP2]], i64 1, ptr [[TMP5]])1086; CHECK-NEXT:    [[TMP8:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32> [[L1]], <4 x i32> [[L2]], i64 1, ptr [[A]])1087; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP6]], 01088; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP8]], 01089; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP13]], 01090; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X2_T:%.*]] poison, <4 x i32> [[TMP9]], 01091; CHECK-NEXT:    [[TMP16:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP6]], 11092; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP8]], 11093; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue { <4 x i32>, <4 x i32> } [[TMP15]], <4 x i32> [[TMP16]], 11094; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X2_T]] [[TMP10]], <4 x i32> [[TMP11]], 11095; CHECK-NEXT:    store { <4 x i32>, <4 x i32> } [[TMP14]], ptr @__msan_retval_tls, align 81096; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X2_T]] [[TMP12]]1097;1098  %tmpvar2 = call %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32> %L1, <4 x i32> %L2, i64 1, ptr %A)1099  ret %struct.__neon_int32x4x2_t  %tmpvar21100}1101 1102define %struct.__neon_int32x4x3_t @ld3lane_4s(<4 x i32> %L1, <4 x i32> %L2, <4 x i32> %L3, ptr %A) nounwind #0 {1103; Make sure we are using the operands defined by the ABI1104; CHECK-LABEL: define %struct.__neon_int32x4x3_t @ld3lane_4s(1105; CHECK-SAME: <4 x i32> [[L1:%.*]], <4 x i32> [[L2:%.*]], <4 x i32> [[L3:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {1106; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 81107; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81108; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81109; CHECK-NEXT:    call void @llvm.donothing()1110; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i641111; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761112; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1113; CHECK-NEXT:    [[TMP7:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3lane.v4i32.p0(<4 x i32> [[TMP1]], <4 x i32> [[TMP2]], <4 x i32> [[TMP3]], i64 1, ptr [[TMP6]])1114; CHECK-NEXT:    [[TMP10:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3lane.v4i32.p0(<4 x i32> [[L1]], <4 x i32> [[L2]], <4 x i32> [[L3]], i64 1, ptr [[A]])1115; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP7]], 01116; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP10]], 01117; CHECK-NEXT:    [[TMP18:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP9]], 01118; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T:%.*]] poison, <4 x i32> [[TMP11]], 01119; CHECK-NEXT:    [[TMP20:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP7]], 11120; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP10]], 11121; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP18]], <4 x i32> [[TMP20]], 11122; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T]] [[TMP12]], <4 x i32> [[TMP13]], 11123; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP7]], 21124; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP10]], 21125; CHECK-NEXT:    [[TMP19:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP21]], <4 x i32> [[TMP17]], 21126; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T]] [[TMP14]], <4 x i32> [[TMP15]], 21127; CHECK-NEXT:    store { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP19]], ptr @__msan_retval_tls, align 81128; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X3_T]] [[TMP16]]1129;1130  %tmpvar2 = call %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld3lane.v4i32.p0(<4 x i32> %L1, <4 x i32> %L2, <4 x i32> %L3, i64 1, ptr %A)1131  ret %struct.__neon_int32x4x3_t  %tmpvar21132}1133 1134define %struct.__neon_int32x4x4_t @ld4lane_4s(<4 x i32> %L1, <4 x i32> %L2, <4 x i32> %L3, <4 x i32> %L4, ptr %A) nounwind #0 {1135; Make sure we are using the operands defined by the ABI1136; CHECK-LABEL: define %struct.__neon_int32x4x4_t @ld4lane_4s(1137; CHECK-SAME: <4 x i32> [[L1:%.*]], <4 x i32> [[L2:%.*]], <4 x i32> [[L3:%.*]], <4 x i32> [[L4:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {1138; CHECK-NEXT:    [[TMP1:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 81139; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81140; CHECK-NEXT:    [[TMP3:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81141; CHECK-NEXT:    [[TMP4:%.*]] = load <4 x i32>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81142; CHECK-NEXT:    call void @llvm.donothing()1143; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i641144; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761145; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1146; CHECK-NEXT:    [[TMP8:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4lane.v4i32.p0(<4 x i32> [[TMP1]], <4 x i32> [[TMP2]], <4 x i32> [[TMP3]], <4 x i32> [[TMP4]], i64 1, ptr [[TMP7]])1147; CHECK-NEXT:    [[TMP12:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4lane.v4i32.p0(<4 x i32> [[L1]], <4 x i32> [[L2]], <4 x i32> [[L3]], <4 x i32> [[L4]], i64 1, ptr [[A]])1148; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP8]], 01149; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP12]], 01150; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP10]], 01151; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T:%.*]] poison, <4 x i32> [[TMP13]], 01152; CHECK-NEXT:    [[TMP23:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP8]], 11153; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP12]], 11154; CHECK-NEXT:    [[TMP25:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP21]], <4 x i32> [[TMP23]], 11155; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP14]], <4 x i32> [[TMP15]], 11156; CHECK-NEXT:    [[TMP26:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP8]], 21157; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP12]], 21158; CHECK-NEXT:    [[TMP27:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP25]], <4 x i32> [[TMP26]], 21159; CHECK-NEXT:    [[TMP18:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP16]], <4 x i32> [[TMP17]], 21160; CHECK-NEXT:    [[TMP22:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP8]], 31161; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP12]], 31162; CHECK-NEXT:    [[TMP24:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP27]], <4 x i32> [[TMP22]], 31163; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP18]], <4 x i32> [[TMP19]], 31164; CHECK-NEXT:    store { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP24]], ptr @__msan_retval_tls, align 81165; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X4_T]] [[TMP20]]1166;1167  %tmpvar2 = call %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld4lane.v4i32.p0(<4 x i32> %L1, <4 x i32> %L2, <4 x i32> %L3, <4 x i32> %L4, i64 1, ptr %A)1168  ret %struct.__neon_int32x4x4_t  %tmpvar21169}1170 1171declare %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32>, <4 x i32>, i64, ptr) nounwind readonly1172declare %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld3lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, i64, ptr) nounwind readonly1173declare %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld4lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i64, ptr) nounwind readonly1174 1175define %struct.__neon_int64x2x2_t @ld2lane_2d(<2 x i64> %L1, <2 x i64> %L2, ptr %A) nounwind #0 {1176; Make sure we are using the operands defined by the ABI1177; CHECK-LABEL: define %struct.__neon_int64x2x2_t @ld2lane_2d(1178; CHECK-SAME: <2 x i64> [[L1:%.*]], <2 x i64> [[L2:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {1179; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 81180; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81181; CHECK-NEXT:    call void @llvm.donothing()1182; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[A]] to i641183; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 1935140464885761184; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr1185; CHECK-NEXT:    [[TMP6:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64> [[TMP1]], <2 x i64> [[TMP2]], i64 1, ptr [[TMP5]])1186; CHECK-NEXT:    [[TMP8:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64> [[L1]], <2 x i64> [[L2]], i64 1, ptr [[A]])1187; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP6]], 01188; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP8]], 01189; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP13]], 01190; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X2_T:%.*]] poison, <2 x i64> [[TMP9]], 01191; CHECK-NEXT:    [[TMP16:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP6]], 11192; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP8]], 11193; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue { <2 x i64>, <2 x i64> } [[TMP15]], <2 x i64> [[TMP16]], 11194; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X2_T]] [[TMP10]], <2 x i64> [[TMP11]], 11195; CHECK-NEXT:    store { <2 x i64>, <2 x i64> } [[TMP14]], ptr @__msan_retval_tls, align 81196; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X2_T]] [[TMP12]]1197;1198  %tmpvar2 = call %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64> %L1, <2 x i64> %L2, i64 1, ptr %A)1199  ret %struct.__neon_int64x2x2_t  %tmpvar21200}1201 1202define %struct.__neon_int64x2x3_t @ld3lane_2d(<2 x i64> %L1, <2 x i64> %L2, <2 x i64> %L3, ptr %A) nounwind #0 {1203; Make sure we are using the operands defined by the ABI1204; CHECK-LABEL: define %struct.__neon_int64x2x3_t @ld3lane_2d(1205; CHECK-SAME: <2 x i64> [[L1:%.*]], <2 x i64> [[L2:%.*]], <2 x i64> [[L3:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {1206; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 81207; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81208; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81209; CHECK-NEXT:    call void @llvm.donothing()1210; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[A]] to i641211; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761212; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1213; CHECK-NEXT:    [[TMP7:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3lane.v2i64.p0(<2 x i64> [[TMP1]], <2 x i64> [[TMP2]], <2 x i64> [[TMP3]], i64 1, ptr [[TMP6]])1214; CHECK-NEXT:    [[TMP10:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3lane.v2i64.p0(<2 x i64> [[L1]], <2 x i64> [[L2]], <2 x i64> [[L3]], i64 1, ptr [[A]])1215; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP7]], 01216; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP10]], 01217; CHECK-NEXT:    [[TMP18:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP9]], 01218; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T:%.*]] poison, <2 x i64> [[TMP11]], 01219; CHECK-NEXT:    [[TMP20:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP7]], 11220; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP10]], 11221; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP18]], <2 x i64> [[TMP20]], 11222; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T]] [[TMP12]], <2 x i64> [[TMP13]], 11223; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP7]], 21224; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP10]], 21225; CHECK-NEXT:    [[TMP19:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP21]], <2 x i64> [[TMP17]], 21226; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T]] [[TMP14]], <2 x i64> [[TMP15]], 21227; CHECK-NEXT:    store { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP19]], ptr @__msan_retval_tls, align 81228; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X3_T]] [[TMP16]]1229;1230  %tmpvar2 = call %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld3lane.v2i64.p0(<2 x i64> %L1, <2 x i64> %L2, <2 x i64> %L3, i64 1, ptr %A)1231  ret %struct.__neon_int64x2x3_t  %tmpvar21232}1233 1234define %struct.__neon_int64x2x4_t @ld4lane_2d(<2 x i64> %L1, <2 x i64> %L2, <2 x i64> %L3, <2 x i64> %L4, ptr %A) nounwind #0 {1235; Make sure we are using the operands defined by the ABI1236; CHECK-LABEL: define %struct.__neon_int64x2x4_t @ld4lane_2d(1237; CHECK-SAME: <2 x i64> [[L1:%.*]], <2 x i64> [[L2:%.*]], <2 x i64> [[L3:%.*]], <2 x i64> [[L4:%.*]], ptr [[A:%.*]]) #[[ATTR0]] {1238; CHECK-NEXT:    [[TMP1:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 81239; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 81240; CHECK-NEXT:    [[TMP3:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 32), align 81241; CHECK-NEXT:    [[TMP4:%.*]] = load <2 x i64>, ptr getelementptr (i8, ptr @__msan_param_tls, i64 48), align 81242; CHECK-NEXT:    call void @llvm.donothing()1243; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i641244; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885761245; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr1246; CHECK-NEXT:    [[TMP8:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4lane.v2i64.p0(<2 x i64> [[TMP1]], <2 x i64> [[TMP2]], <2 x i64> [[TMP3]], <2 x i64> [[TMP4]], i64 1, ptr [[TMP7]])1247; CHECK-NEXT:    [[TMP12:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4lane.v2i64.p0(<2 x i64> [[L1]], <2 x i64> [[L2]], <2 x i64> [[L3]], <2 x i64> [[L4]], i64 1, ptr [[A]])1248; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP8]], 01249; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP12]], 01250; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP10]], 01251; CHECK-NEXT:    [[TMP14:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T:%.*]] poison, <2 x i64> [[TMP13]], 01252; CHECK-NEXT:    [[TMP23:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP8]], 11253; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP12]], 11254; CHECK-NEXT:    [[TMP25:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP21]], <2 x i64> [[TMP23]], 11255; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP14]], <2 x i64> [[TMP15]], 11256; CHECK-NEXT:    [[TMP26:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP8]], 21257; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP12]], 21258; CHECK-NEXT:    [[TMP27:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP25]], <2 x i64> [[TMP26]], 21259; CHECK-NEXT:    [[TMP18:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP16]], <2 x i64> [[TMP17]], 21260; CHECK-NEXT:    [[TMP22:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP8]], 31261; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP12]], 31262; CHECK-NEXT:    [[TMP24:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP27]], <2 x i64> [[TMP22]], 31263; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP18]], <2 x i64> [[TMP19]], 31264; CHECK-NEXT:    store { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP24]], ptr @__msan_retval_tls, align 81265; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X4_T]] [[TMP20]]1266;1267  %tmpvar2 = call %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld4lane.v2i64.p0(<2 x i64> %L1, <2 x i64> %L2, <2 x i64> %L3, <2 x i64> %L4, i64 1, ptr %A)1268  ret %struct.__neon_int64x2x4_t  %tmpvar21269}1270 1271declare %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64>, <2 x i64>, i64, ptr) nounwind readonly1272declare %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld3lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, i64, ptr) nounwind readonly1273declare %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld4lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, <2 x i64>, i64, ptr) nounwind readonly1274 1275define <8 x i8> @ld1r_8b(ptr %bar) #0 {1276; Make sure we are using the operands defined by the ABI1277; CHECK-LABEL: define <8 x i8> @ld1r_8b(1278; CHECK-SAME: ptr [[BAR:%.*]]) #[[ATTR1:[0-9]+]] {1279; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 81280; CHECK-NEXT:    call void @llvm.donothing()1281; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01282; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1:![0-9]+]]1283; CHECK:       2:1284; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7:[0-9]+]]1285; CHECK-NEXT:    unreachable1286; CHECK:       3:1287; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i8, ptr [[BAR]], align 11288; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[BAR]] to i641289; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761290; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1291; CHECK-NEXT:    [[_MSLD:%.*]] = load i8, ptr [[TMP6]], align 11292; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <8 x i8> splat (i8 -1), i8 [[_MSLD]], i32 01293; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <8 x i8> poison, i8 [[TMPVAR1]], i32 01294; CHECK-NEXT:    [[_MSPROP1:%.*]] = insertelement <8 x i8> [[_MSPROP]], i8 [[_MSLD]], i32 11295; CHECK-NEXT:    [[TMPVAR3:%.*]] = insertelement <8 x i8> [[TMPVAR2]], i8 [[TMPVAR1]], i32 11296; CHECK-NEXT:    [[_MSPROP2:%.*]] = insertelement <8 x i8> [[_MSPROP1]], i8 [[_MSLD]], i32 21297; CHECK-NEXT:    [[TMPVAR4:%.*]] = insertelement <8 x i8> [[TMPVAR3]], i8 [[TMPVAR1]], i32 21298; CHECK-NEXT:    [[_MSPROP3:%.*]] = insertelement <8 x i8> [[_MSPROP2]], i8 [[_MSLD]], i32 31299; CHECK-NEXT:    [[TMPVAR5:%.*]] = insertelement <8 x i8> [[TMPVAR4]], i8 [[TMPVAR1]], i32 31300; CHECK-NEXT:    [[_MSPROP4:%.*]] = insertelement <8 x i8> [[_MSPROP3]], i8 [[_MSLD]], i32 41301; CHECK-NEXT:    [[TMPVAR6:%.*]] = insertelement <8 x i8> [[TMPVAR5]], i8 [[TMPVAR1]], i32 41302; CHECK-NEXT:    [[_MSPROP5:%.*]] = insertelement <8 x i8> [[_MSPROP4]], i8 [[_MSLD]], i32 51303; CHECK-NEXT:    [[TMPVAR7:%.*]] = insertelement <8 x i8> [[TMPVAR6]], i8 [[TMPVAR1]], i32 51304; CHECK-NEXT:    [[_MSPROP6:%.*]] = insertelement <8 x i8> [[_MSPROP5]], i8 [[_MSLD]], i32 61305; CHECK-NEXT:    [[TMPVAR8:%.*]] = insertelement <8 x i8> [[TMPVAR7]], i8 [[TMPVAR1]], i32 61306; CHECK-NEXT:    [[_MSPROP7:%.*]] = insertelement <8 x i8> [[_MSPROP6]], i8 [[_MSLD]], i32 71307; CHECK-NEXT:    [[TMPVAR9:%.*]] = insertelement <8 x i8> [[TMPVAR8]], i8 [[TMPVAR1]], i32 71308; CHECK-NEXT:    store <8 x i8> [[_MSPROP7]], ptr @__msan_retval_tls, align 81309; CHECK-NEXT:    ret <8 x i8> [[TMPVAR9]]1310;1311  %tmpvar1 = load i8, ptr %bar1312  %tmpvar2 = insertelement <8 x i8> <i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>, i8 %tmpvar1, i32 01313  %tmpvar3 = insertelement <8 x i8> %tmpvar2, i8 %tmpvar1, i32 11314  %tmpvar4 = insertelement <8 x i8> %tmpvar3, i8 %tmpvar1, i32 21315  %tmpvar5 = insertelement <8 x i8> %tmpvar4, i8 %tmpvar1, i32 31316  %tmpvar6 = insertelement <8 x i8> %tmpvar5, i8 %tmpvar1, i32 41317  %tmpvar7 = insertelement <8 x i8> %tmpvar6, i8 %tmpvar1, i32 51318  %tmpvar8 = insertelement <8 x i8> %tmpvar7, i8 %tmpvar1, i32 61319  %tmpvar9 = insertelement <8 x i8> %tmpvar8, i8 %tmpvar1, i32 71320  ret <8 x i8> %tmpvar91321}1322 1323define <16 x i8> @ld1r_16b(ptr %bar) #0 {1324; Make sure we are using the operands defined by the ABI1325; CHECK-LABEL: define <16 x i8> @ld1r_16b(1326; CHECK-SAME: ptr [[BAR:%.*]]) #[[ATTR1]] {1327; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 81328; CHECK-NEXT:    call void @llvm.donothing()1329; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01330; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]1331; CHECK:       2:1332; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]1333; CHECK-NEXT:    unreachable1334; CHECK:       3:1335; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i8, ptr [[BAR]], align 11336; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[BAR]] to i641337; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761338; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1339; CHECK-NEXT:    [[_MSLD:%.*]] = load i8, ptr [[TMP6]], align 11340; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <16 x i8> splat (i8 -1), i8 [[_MSLD]], i32 01341; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <16 x i8> poison, i8 [[TMPVAR1]], i32 01342; CHECK-NEXT:    [[_MSPROP1:%.*]] = insertelement <16 x i8> [[_MSPROP]], i8 [[_MSLD]], i32 11343; CHECK-NEXT:    [[TMPVAR3:%.*]] = insertelement <16 x i8> [[TMPVAR2]], i8 [[TMPVAR1]], i32 11344; CHECK-NEXT:    [[_MSPROP2:%.*]] = insertelement <16 x i8> [[_MSPROP1]], i8 [[_MSLD]], i32 21345; CHECK-NEXT:    [[TMPVAR4:%.*]] = insertelement <16 x i8> [[TMPVAR3]], i8 [[TMPVAR1]], i32 21346; CHECK-NEXT:    [[_MSPROP3:%.*]] = insertelement <16 x i8> [[_MSPROP2]], i8 [[_MSLD]], i32 31347; CHECK-NEXT:    [[TMPVAR5:%.*]] = insertelement <16 x i8> [[TMPVAR4]], i8 [[TMPVAR1]], i32 31348; CHECK-NEXT:    [[_MSPROP4:%.*]] = insertelement <16 x i8> [[_MSPROP3]], i8 [[_MSLD]], i32 41349; CHECK-NEXT:    [[TMPVAR6:%.*]] = insertelement <16 x i8> [[TMPVAR5]], i8 [[TMPVAR1]], i32 41350; CHECK-NEXT:    [[_MSPROP5:%.*]] = insertelement <16 x i8> [[_MSPROP4]], i8 [[_MSLD]], i32 51351; CHECK-NEXT:    [[TMPVAR7:%.*]] = insertelement <16 x i8> [[TMPVAR6]], i8 [[TMPVAR1]], i32 51352; CHECK-NEXT:    [[_MSPROP6:%.*]] = insertelement <16 x i8> [[_MSPROP5]], i8 [[_MSLD]], i32 61353; CHECK-NEXT:    [[TMPVAR8:%.*]] = insertelement <16 x i8> [[TMPVAR7]], i8 [[TMPVAR1]], i32 61354; CHECK-NEXT:    [[_MSPROP7:%.*]] = insertelement <16 x i8> [[_MSPROP6]], i8 [[_MSLD]], i32 71355; CHECK-NEXT:    [[TMPVAR9:%.*]] = insertelement <16 x i8> [[TMPVAR8]], i8 [[TMPVAR1]], i32 71356; CHECK-NEXT:    [[_MSPROP8:%.*]] = insertelement <16 x i8> [[_MSPROP7]], i8 [[_MSLD]], i32 81357; CHECK-NEXT:    [[TMPVAR10:%.*]] = insertelement <16 x i8> [[TMPVAR9]], i8 [[TMPVAR1]], i32 81358; CHECK-NEXT:    [[_MSPROP9:%.*]] = insertelement <16 x i8> [[_MSPROP8]], i8 [[_MSLD]], i32 91359; CHECK-NEXT:    [[TMPVAR11:%.*]] = insertelement <16 x i8> [[TMPVAR10]], i8 [[TMPVAR1]], i32 91360; CHECK-NEXT:    [[_MSPROP10:%.*]] = insertelement <16 x i8> [[_MSPROP9]], i8 [[_MSLD]], i32 101361; CHECK-NEXT:    [[TMPVAR12:%.*]] = insertelement <16 x i8> [[TMPVAR11]], i8 [[TMPVAR1]], i32 101362; CHECK-NEXT:    [[_MSPROP11:%.*]] = insertelement <16 x i8> [[_MSPROP10]], i8 [[_MSLD]], i32 111363; CHECK-NEXT:    [[TMPVAR13:%.*]] = insertelement <16 x i8> [[TMPVAR12]], i8 [[TMPVAR1]], i32 111364; CHECK-NEXT:    [[_MSPROP12:%.*]] = insertelement <16 x i8> [[_MSPROP11]], i8 [[_MSLD]], i32 121365; CHECK-NEXT:    [[TMPVAR14:%.*]] = insertelement <16 x i8> [[TMPVAR13]], i8 [[TMPVAR1]], i32 121366; CHECK-NEXT:    [[_MSPROP13:%.*]] = insertelement <16 x i8> [[_MSPROP12]], i8 [[_MSLD]], i32 131367; CHECK-NEXT:    [[TMPVAR15:%.*]] = insertelement <16 x i8> [[TMPVAR14]], i8 [[TMPVAR1]], i32 131368; CHECK-NEXT:    [[_MSPROP14:%.*]] = insertelement <16 x i8> [[_MSPROP13]], i8 [[_MSLD]], i32 141369; CHECK-NEXT:    [[TMPVAR16:%.*]] = insertelement <16 x i8> [[TMPVAR15]], i8 [[TMPVAR1]], i32 141370; CHECK-NEXT:    [[_MSPROP15:%.*]] = insertelement <16 x i8> [[_MSPROP14]], i8 [[_MSLD]], i32 151371; CHECK-NEXT:    [[TMPVAR17:%.*]] = insertelement <16 x i8> [[TMPVAR16]], i8 [[TMPVAR1]], i32 151372; CHECK-NEXT:    store <16 x i8> [[_MSPROP15]], ptr @__msan_retval_tls, align 81373; CHECK-NEXT:    ret <16 x i8> [[TMPVAR17]]1374;1375  %tmpvar1 = load i8, ptr %bar1376  %tmpvar2 = insertelement <16 x i8> <i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison, i8 poison>, i8 %tmpvar1, i32 01377  %tmpvar3 = insertelement <16 x i8> %tmpvar2, i8 %tmpvar1, i32 11378  %tmpvar4 = insertelement <16 x i8> %tmpvar3, i8 %tmpvar1, i32 21379  %tmpvar5 = insertelement <16 x i8> %tmpvar4, i8 %tmpvar1, i32 31380  %tmpvar6 = insertelement <16 x i8> %tmpvar5, i8 %tmpvar1, i32 41381  %tmpvar7 = insertelement <16 x i8> %tmpvar6, i8 %tmpvar1, i32 51382  %tmpvar8 = insertelement <16 x i8> %tmpvar7, i8 %tmpvar1, i32 61383  %tmpvar9 = insertelement <16 x i8> %tmpvar8, i8 %tmpvar1, i32 71384  %tmpvar10 = insertelement <16 x i8> %tmpvar9, i8 %tmpvar1, i32 81385  %tmpvar11 = insertelement <16 x i8> %tmpvar10, i8 %tmpvar1, i32 91386  %tmpvar12 = insertelement <16 x i8> %tmpvar11, i8 %tmpvar1, i32 101387  %tmpvar13 = insertelement <16 x i8> %tmpvar12, i8 %tmpvar1, i32 111388  %tmpvar14 = insertelement <16 x i8> %tmpvar13, i8 %tmpvar1, i32 121389  %tmpvar15 = insertelement <16 x i8> %tmpvar14, i8 %tmpvar1, i32 131390  %tmpvar16 = insertelement <16 x i8> %tmpvar15, i8 %tmpvar1, i32 141391  %tmpvar17 = insertelement <16 x i8> %tmpvar16, i8 %tmpvar1, i32 151392  ret <16 x i8> %tmpvar171393}1394 1395define <4 x i16> @ld1r_4h(ptr %bar) #0 {1396; Make sure we are using the operands defined by the ABI1397; CHECK-LABEL: define <4 x i16> @ld1r_4h(1398; CHECK-SAME: ptr [[BAR:%.*]]) #[[ATTR1]] {1399; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 81400; CHECK-NEXT:    call void @llvm.donothing()1401; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01402; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]1403; CHECK:       2:1404; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]1405; CHECK-NEXT:    unreachable1406; CHECK:       3:1407; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i16, ptr [[BAR]], align 21408; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[BAR]] to i641409; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761410; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1411; CHECK-NEXT:    [[_MSLD:%.*]] = load i16, ptr [[TMP6]], align 21412; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <4 x i16> splat (i16 -1), i16 [[_MSLD]], i32 01413; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <4 x i16> poison, i16 [[TMPVAR1]], i32 01414; CHECK-NEXT:    [[_MSPROP1:%.*]] = insertelement <4 x i16> [[_MSPROP]], i16 [[_MSLD]], i32 11415; CHECK-NEXT:    [[TMPVAR3:%.*]] = insertelement <4 x i16> [[TMPVAR2]], i16 [[TMPVAR1]], i32 11416; CHECK-NEXT:    [[_MSPROP2:%.*]] = insertelement <4 x i16> [[_MSPROP1]], i16 [[_MSLD]], i32 21417; CHECK-NEXT:    [[TMPVAR4:%.*]] = insertelement <4 x i16> [[TMPVAR3]], i16 [[TMPVAR1]], i32 21418; CHECK-NEXT:    [[_MSPROP3:%.*]] = insertelement <4 x i16> [[_MSPROP2]], i16 [[_MSLD]], i32 31419; CHECK-NEXT:    [[TMPVAR5:%.*]] = insertelement <4 x i16> [[TMPVAR4]], i16 [[TMPVAR1]], i32 31420; CHECK-NEXT:    store <4 x i16> [[_MSPROP3]], ptr @__msan_retval_tls, align 81421; CHECK-NEXT:    ret <4 x i16> [[TMPVAR5]]1422;1423  %tmpvar1 = load i16, ptr %bar1424  %tmpvar2 = insertelement <4 x i16> <i16 poison, i16 poison, i16 poison, i16 poison>, i16 %tmpvar1, i32 01425  %tmpvar3 = insertelement <4 x i16> %tmpvar2, i16 %tmpvar1, i32 11426  %tmpvar4 = insertelement <4 x i16> %tmpvar3, i16 %tmpvar1, i32 21427  %tmpvar5 = insertelement <4 x i16> %tmpvar4, i16 %tmpvar1, i32 31428  ret <4 x i16> %tmpvar51429}1430 1431define <8 x i16> @ld1r_8h(ptr %bar) #0 {1432; Make sure we are using the operands defined by the ABI1433; CHECK-LABEL: define <8 x i16> @ld1r_8h(1434; CHECK-SAME: ptr [[BAR:%.*]]) #[[ATTR1]] {1435; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 81436; CHECK-NEXT:    call void @llvm.donothing()1437; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01438; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]1439; CHECK:       2:1440; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]1441; CHECK-NEXT:    unreachable1442; CHECK:       3:1443; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i16, ptr [[BAR]], align 21444; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[BAR]] to i641445; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761446; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1447; CHECK-NEXT:    [[_MSLD:%.*]] = load i16, ptr [[TMP6]], align 21448; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <8 x i16> splat (i16 -1), i16 [[_MSLD]], i32 01449; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <8 x i16> poison, i16 [[TMPVAR1]], i32 01450; CHECK-NEXT:    [[_MSPROP1:%.*]] = insertelement <8 x i16> [[_MSPROP]], i16 [[_MSLD]], i32 11451; CHECK-NEXT:    [[TMPVAR3:%.*]] = insertelement <8 x i16> [[TMPVAR2]], i16 [[TMPVAR1]], i32 11452; CHECK-NEXT:    [[_MSPROP2:%.*]] = insertelement <8 x i16> [[_MSPROP1]], i16 [[_MSLD]], i32 21453; CHECK-NEXT:    [[TMPVAR4:%.*]] = insertelement <8 x i16> [[TMPVAR3]], i16 [[TMPVAR1]], i32 21454; CHECK-NEXT:    [[_MSPROP3:%.*]] = insertelement <8 x i16> [[_MSPROP2]], i16 [[_MSLD]], i32 31455; CHECK-NEXT:    [[TMPVAR5:%.*]] = insertelement <8 x i16> [[TMPVAR4]], i16 [[TMPVAR1]], i32 31456; CHECK-NEXT:    [[_MSPROP4:%.*]] = insertelement <8 x i16> [[_MSPROP3]], i16 [[_MSLD]], i32 41457; CHECK-NEXT:    [[TMPVAR6:%.*]] = insertelement <8 x i16> [[TMPVAR5]], i16 [[TMPVAR1]], i32 41458; CHECK-NEXT:    [[_MSPROP5:%.*]] = insertelement <8 x i16> [[_MSPROP4]], i16 [[_MSLD]], i32 51459; CHECK-NEXT:    [[TMPVAR7:%.*]] = insertelement <8 x i16> [[TMPVAR6]], i16 [[TMPVAR1]], i32 51460; CHECK-NEXT:    [[_MSPROP6:%.*]] = insertelement <8 x i16> [[_MSPROP5]], i16 [[_MSLD]], i32 61461; CHECK-NEXT:    [[TMPVAR8:%.*]] = insertelement <8 x i16> [[TMPVAR7]], i16 [[TMPVAR1]], i32 61462; CHECK-NEXT:    [[_MSPROP7:%.*]] = insertelement <8 x i16> [[_MSPROP6]], i16 [[_MSLD]], i32 71463; CHECK-NEXT:    [[TMPVAR9:%.*]] = insertelement <8 x i16> [[TMPVAR8]], i16 [[TMPVAR1]], i32 71464; CHECK-NEXT:    store <8 x i16> [[_MSPROP7]], ptr @__msan_retval_tls, align 81465; CHECK-NEXT:    ret <8 x i16> [[TMPVAR9]]1466;1467  %tmpvar1 = load i16, ptr %bar1468  %tmpvar2 = insertelement <8 x i16> <i16 poison, i16 poison, i16 poison, i16 poison, i16 poison, i16 poison, i16 poison, i16 poison>, i16 %tmpvar1, i32 01469  %tmpvar3 = insertelement <8 x i16> %tmpvar2, i16 %tmpvar1, i32 11470  %tmpvar4 = insertelement <8 x i16> %tmpvar3, i16 %tmpvar1, i32 21471  %tmpvar5 = insertelement <8 x i16> %tmpvar4, i16 %tmpvar1, i32 31472  %tmpvar6 = insertelement <8 x i16> %tmpvar5, i16 %tmpvar1, i32 41473  %tmpvar7 = insertelement <8 x i16> %tmpvar6, i16 %tmpvar1, i32 51474  %tmpvar8 = insertelement <8 x i16> %tmpvar7, i16 %tmpvar1, i32 61475  %tmpvar9 = insertelement <8 x i16> %tmpvar8, i16 %tmpvar1, i32 71476  ret <8 x i16> %tmpvar91477}1478 1479define <2 x i32> @ld1r_2s(ptr %bar) #0 {1480; Make sure we are using the operands defined by the ABI1481; CHECK-LABEL: define <2 x i32> @ld1r_2s(1482; CHECK-SAME: ptr [[BAR:%.*]]) #[[ATTR1]] {1483; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 81484; CHECK-NEXT:    call void @llvm.donothing()1485; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01486; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]1487; CHECK:       2:1488; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]1489; CHECK-NEXT:    unreachable1490; CHECK:       3:1491; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i32, ptr [[BAR]], align 41492; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[BAR]] to i641493; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761494; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1495; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP6]], align 41496; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <2 x i32> splat (i32 -1), i32 [[_MSLD]], i32 01497; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <2 x i32> poison, i32 [[TMPVAR1]], i32 01498; CHECK-NEXT:    [[_MSPROP1:%.*]] = insertelement <2 x i32> [[_MSPROP]], i32 [[_MSLD]], i32 11499; CHECK-NEXT:    [[TMPVAR3:%.*]] = insertelement <2 x i32> [[TMPVAR2]], i32 [[TMPVAR1]], i32 11500; CHECK-NEXT:    store <2 x i32> [[_MSPROP1]], ptr @__msan_retval_tls, align 81501; CHECK-NEXT:    ret <2 x i32> [[TMPVAR3]]1502;1503  %tmpvar1 = load i32, ptr %bar1504  %tmpvar2 = insertelement <2 x i32> <i32 poison, i32 poison>, i32 %tmpvar1, i32 01505  %tmpvar3 = insertelement <2 x i32> %tmpvar2, i32 %tmpvar1, i32 11506  ret <2 x i32> %tmpvar31507}1508 1509define <4 x i32> @ld1r_4s(ptr %bar) #0 {1510; Make sure we are using the operands defined by the ABI1511; CHECK-LABEL: define <4 x i32> @ld1r_4s(1512; CHECK-SAME: ptr [[BAR:%.*]]) #[[ATTR1]] {1513; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 81514; CHECK-NEXT:    call void @llvm.donothing()1515; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01516; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]1517; CHECK:       2:1518; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]1519; CHECK-NEXT:    unreachable1520; CHECK:       3:1521; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i32, ptr [[BAR]], align 41522; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[BAR]] to i641523; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761524; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1525; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP6]], align 41526; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <4 x i32> splat (i32 -1), i32 [[_MSLD]], i32 01527; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <4 x i32> poison, i32 [[TMPVAR1]], i32 01528; CHECK-NEXT:    [[_MSPROP1:%.*]] = insertelement <4 x i32> [[_MSPROP]], i32 [[_MSLD]], i32 11529; CHECK-NEXT:    [[TMPVAR3:%.*]] = insertelement <4 x i32> [[TMPVAR2]], i32 [[TMPVAR1]], i32 11530; CHECK-NEXT:    [[_MSPROP2:%.*]] = insertelement <4 x i32> [[_MSPROP1]], i32 [[_MSLD]], i32 21531; CHECK-NEXT:    [[TMPVAR4:%.*]] = insertelement <4 x i32> [[TMPVAR3]], i32 [[TMPVAR1]], i32 21532; CHECK-NEXT:    [[_MSPROP3:%.*]] = insertelement <4 x i32> [[_MSPROP2]], i32 [[_MSLD]], i32 31533; CHECK-NEXT:    [[TMPVAR5:%.*]] = insertelement <4 x i32> [[TMPVAR4]], i32 [[TMPVAR1]], i32 31534; CHECK-NEXT:    store <4 x i32> [[_MSPROP3]], ptr @__msan_retval_tls, align 81535; CHECK-NEXT:    ret <4 x i32> [[TMPVAR5]]1536;1537  %tmpvar1 = load i32, ptr %bar1538  %tmpvar2 = insertelement <4 x i32> <i32 poison, i32 poison, i32 poison, i32 poison>, i32 %tmpvar1, i32 01539  %tmpvar3 = insertelement <4 x i32> %tmpvar2, i32 %tmpvar1, i32 11540  %tmpvar4 = insertelement <4 x i32> %tmpvar3, i32 %tmpvar1, i32 21541  %tmpvar5 = insertelement <4 x i32> %tmpvar4, i32 %tmpvar1, i32 31542  ret <4 x i32> %tmpvar51543}1544 1545define <2 x i64> @ld1r_2d(ptr %bar) #0 {1546; Make sure we are using the operands defined by the ABI1547; CHECK-LABEL: define <2 x i64> @ld1r_2d(1548; CHECK-SAME: ptr [[BAR:%.*]]) #[[ATTR1]] {1549; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 81550; CHECK-NEXT:    call void @llvm.donothing()1551; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 01552; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]1553; CHECK:       2:1554; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]1555; CHECK-NEXT:    unreachable1556; CHECK:       3:1557; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i64, ptr [[BAR]], align 81558; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[BAR]] to i641559; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885761560; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr1561; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP6]], align 81562; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <2 x i64> splat (i64 -1), i64 [[_MSLD]], i32 01563; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <2 x i64> poison, i64 [[TMPVAR1]], i32 01564; CHECK-NEXT:    [[_MSPROP1:%.*]] = insertelement <2 x i64> [[_MSPROP]], i64 [[_MSLD]], i32 11565; CHECK-NEXT:    [[TMPVAR3:%.*]] = insertelement <2 x i64> [[TMPVAR2]], i64 [[TMPVAR1]], i32 11566; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr @__msan_retval_tls, align 81567; CHECK-NEXT:    ret <2 x i64> [[TMPVAR3]]1568;1569  %tmpvar1 = load i64, ptr %bar1570  %tmpvar2 = insertelement <2 x i64> <i64 poison, i64 poison>, i64 %tmpvar1, i32 01571  %tmpvar3 = insertelement <2 x i64> %tmpvar2, i64 %tmpvar1, i32 11572  ret <2 x i64> %tmpvar31573}1574 1575define %struct.__neon_int8x8x2_t @ld2r_8b(ptr %A) nounwind #0 {1576; Make sure we are using the operands defined by the ABI1577; CHECK-LABEL: define %struct.__neon_int8x8x2_t @ld2r_8b(1578; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1579; CHECK-NEXT:    call void @llvm.donothing()1580; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641581; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761582; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1583; CHECK-NEXT:    [[TMP9:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2r.v8i8.p0(ptr [[TMP3]])1584; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld2r.v8i8.p0(ptr [[A]])1585; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP9]], 01586; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP4]], 01587; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <8 x i8>, <8 x i8> } { <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1) }, <8 x i8> [[TMP11]], 01588; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X2_T:%.*]] poison, <8 x i8> [[TMP5]], 01589; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP9]], 11590; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP4]], 11591; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i8>, <8 x i8> } [[TMP13]], <8 x i8> [[TMP10]], 11592; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X2_T]] [[TMP6]], <8 x i8> [[TMP7]], 11593; CHECK-NEXT:    store { <8 x i8>, <8 x i8> } [[TMP12]], ptr @__msan_retval_tls, align 81594; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X8X2_T]] [[TMP8]]1595;1596  %tmpvar2 = call %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld2r.v8i8.p0(ptr %A)1597  ret %struct.__neon_int8x8x2_t  %tmpvar21598}1599 1600define %struct.__neon_int8x8x3_t @ld3r_8b(ptr %A) nounwind #0 {1601; Make sure we are using the operands defined by the ABI1602; CHECK-LABEL: define %struct.__neon_int8x8x3_t @ld3r_8b(1603; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1604; CHECK-NEXT:    call void @llvm.donothing()1605; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641606; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761607; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1608; CHECK-NEXT:    [[TMP11:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3r.v8i8.p0(ptr [[TMP3]])1609; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld3r.v8i8.p0(ptr [[A]])1610; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP11]], 01611; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 01612; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8> } { <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1) }, <8 x i8> [[TMP13]], 01613; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X3_T:%.*]] poison, <8 x i8> [[TMP5]], 01614; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP11]], 11615; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 11616; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP15]], <8 x i8> [[TMP17]], 11617; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X3_T]] [[TMP6]], <8 x i8> [[TMP7]], 11618; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP11]], 21619; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 21620; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP12]], <8 x i8> [[TMP14]], 21621; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X3_T]] [[TMP8]], <8 x i8> [[TMP9]], 21622; CHECK-NEXT:    store { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP16]], ptr @__msan_retval_tls, align 81623; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X8X3_T]] [[TMP10]]1624;1625  %tmpvar2 = call %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld3r.v8i8.p0(ptr %A)1626  ret %struct.__neon_int8x8x3_t  %tmpvar21627}1628 1629define %struct.__neon_int8x8x4_t @ld4r_8b(ptr %A) nounwind #0 {1630; Make sure we are using the operands defined by the ABI1631; CHECK-LABEL: define %struct.__neon_int8x8x4_t @ld4r_8b(1632; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1633; CHECK-NEXT:    call void @llvm.donothing()1634; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641635; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761636; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1637; CHECK-NEXT:    [[TMP13:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4r.v8i8.p0(ptr [[TMP3]])1638; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld4r.v8i8.p0(ptr [[A]])1639; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 01640; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 01641; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } { <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1) }, <8 x i8> [[TMP15]], 01642; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T:%.*]] poison, <8 x i8> [[TMP5]], 01643; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 11644; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 11645; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP17]], <8 x i8> [[TMP19]], 11646; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T]] [[TMP6]], <8 x i8> [[TMP7]], 11647; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 21648; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 21649; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP21]], <8 x i8> [[TMP14]], 21650; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T]] [[TMP8]], <8 x i8> [[TMP9]], 21651; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 31652; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 31653; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP16]], <8 x i8> [[TMP18]], 31654; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T]] [[TMP10]], <8 x i8> [[TMP11]], 31655; CHECK-NEXT:    store { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP20]], ptr @__msan_retval_tls, align 81656; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X8X4_T]] [[TMP12]]1657;1658  %tmpvar2 = call %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld4r.v8i8.p0(ptr %A)1659  ret %struct.__neon_int8x8x4_t  %tmpvar21660}1661 1662declare %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld2r.v8i8.p0(ptr) nounwind readonly1663declare %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld3r.v8i8.p0(ptr) nounwind readonly1664declare %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld4r.v8i8.p0(ptr) nounwind readonly1665 1666define %struct.__neon_int8x16x2_t @ld2r_16b(ptr %A) nounwind #0 {1667; Make sure we are using the operands defined by the ABI1668; CHECK-LABEL: define %struct.__neon_int8x16x2_t @ld2r_16b(1669; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1670; CHECK-NEXT:    call void @llvm.donothing()1671; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641672; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761673; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1674; CHECK-NEXT:    [[TMP9:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2r.v16i8.p0(ptr [[TMP3]])1675; CHECK-NEXT:    [[TMP4:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld2r.v16i8.p0(ptr [[A]])1676; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP9]], 01677; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP4]], 01678; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP11]], 01679; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X2_T:%.*]] poison, <16 x i8> [[TMP5]], 01680; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP9]], 11681; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP4]], 11682; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <16 x i8>, <16 x i8> } [[TMP13]], <16 x i8> [[TMP10]], 11683; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X2_T]] [[TMP6]], <16 x i8> [[TMP7]], 11684; CHECK-NEXT:    store { <16 x i8>, <16 x i8> } [[TMP12]], ptr @__msan_retval_tls, align 81685; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X2_T]] [[TMP8]]1686;1687  %tmpvar2 = call %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2r.v16i8.p0(ptr %A)1688  ret %struct.__neon_int8x16x2_t  %tmpvar21689}1690 1691define %struct.__neon_int8x16x3_t @ld3r_16b(ptr %A) nounwind #0 {1692; Make sure we are using the operands defined by the ABI1693; CHECK-LABEL: define %struct.__neon_int8x16x3_t @ld3r_16b(1694; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1695; CHECK-NEXT:    call void @llvm.donothing()1696; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641697; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761698; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1699; CHECK-NEXT:    [[TMP11:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3r.v16i8.p0(ptr [[TMP3]])1700; CHECK-NEXT:    [[TMP4:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld3r.v16i8.p0(ptr [[A]])1701; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP11]], 01702; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 01703; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP13]], 01704; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T:%.*]] poison, <16 x i8> [[TMP5]], 01705; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP11]], 11706; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 11707; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP15]], <16 x i8> [[TMP17]], 11708; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T]] [[TMP6]], <16 x i8> [[TMP7]], 11709; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP11]], 21710; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 21711; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP12]], <16 x i8> [[TMP14]], 21712; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T]] [[TMP8]], <16 x i8> [[TMP9]], 21713; CHECK-NEXT:    store { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP16]], ptr @__msan_retval_tls, align 81714; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X3_T]] [[TMP10]]1715;1716  %tmpvar2 = call %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld3r.v16i8.p0(ptr %A)1717  ret %struct.__neon_int8x16x3_t  %tmpvar21718}1719 1720define %struct.__neon_int8x16x4_t @ld4r_16b(ptr %A) nounwind #0 {1721; Make sure we are using the operands defined by the ABI1722; CHECK-LABEL: define %struct.__neon_int8x16x4_t @ld4r_16b(1723; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1724; CHECK-NEXT:    call void @llvm.donothing()1725; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641726; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761727; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1728; CHECK-NEXT:    [[TMP13:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4r.v16i8.p0(ptr [[TMP3]])1729; CHECK-NEXT:    [[TMP4:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld4r.v16i8.p0(ptr [[A]])1730; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 01731; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 01732; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP15]], 01733; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T:%.*]] poison, <16 x i8> [[TMP5]], 01734; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 11735; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 11736; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP17]], <16 x i8> [[TMP19]], 11737; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP6]], <16 x i8> [[TMP7]], 11738; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 21739; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 21740; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP21]], <16 x i8> [[TMP14]], 21741; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP8]], <16 x i8> [[TMP9]], 21742; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 31743; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 31744; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP16]], <16 x i8> [[TMP18]], 31745; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP10]], <16 x i8> [[TMP11]], 31746; CHECK-NEXT:    store { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP20]], ptr @__msan_retval_tls, align 81747; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X4_T]] [[TMP12]]1748;1749  %tmpvar2 = call %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld4r.v16i8.p0(ptr %A)1750  ret %struct.__neon_int8x16x4_t  %tmpvar21751}1752 1753declare %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2r.v16i8.p0(ptr) nounwind readonly1754declare %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld3r.v16i8.p0(ptr) nounwind readonly1755declare %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld4r.v16i8.p0(ptr) nounwind readonly1756 1757define %struct.__neon_int16x4x2_t @ld2r_4h(ptr %A) nounwind #0 {1758; Make sure we are using the operands defined by the ABI1759; CHECK-LABEL: define %struct.__neon_int16x4x2_t @ld2r_4h(1760; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1761; CHECK-NEXT:    call void @llvm.donothing()1762; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641763; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761764; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1765; CHECK-NEXT:    [[TMP9:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2r.v4i16.p0(ptr [[TMP3]])1766; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld2r.v4i16.p0(ptr [[A]])1767; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP9]], 01768; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP4]], 01769; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <4 x i16>, <4 x i16> } { <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1) }, <4 x i16> [[TMP11]], 01770; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X2_T:%.*]] poison, <4 x i16> [[TMP5]], 01771; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP9]], 11772; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP4]], 11773; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i16>, <4 x i16> } [[TMP13]], <4 x i16> [[TMP10]], 11774; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X2_T]] [[TMP6]], <4 x i16> [[TMP7]], 11775; CHECK-NEXT:    store { <4 x i16>, <4 x i16> } [[TMP12]], ptr @__msan_retval_tls, align 81776; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X4X2_T]] [[TMP8]]1777;1778  %tmpvar2 = call %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld2r.v4i16.p0(ptr %A)1779  ret %struct.__neon_int16x4x2_t  %tmpvar21780}1781 1782define %struct.__neon_int16x4x3_t @ld3r_4h(ptr %A) nounwind #0 {1783; Make sure we are using the operands defined by the ABI1784; CHECK-LABEL: define %struct.__neon_int16x4x3_t @ld3r_4h(1785; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1786; CHECK-NEXT:    call void @llvm.donothing()1787; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641788; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761789; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1790; CHECK-NEXT:    [[TMP11:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3r.v4i16.p0(ptr [[TMP3]])1791; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld3r.v4i16.p0(ptr [[A]])1792; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP11]], 01793; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 01794; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16> } { <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1) }, <4 x i16> [[TMP13]], 01795; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X3_T:%.*]] poison, <4 x i16> [[TMP5]], 01796; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP11]], 11797; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 11798; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP15]], <4 x i16> [[TMP17]], 11799; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X3_T]] [[TMP6]], <4 x i16> [[TMP7]], 11800; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP11]], 21801; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 21802; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP12]], <4 x i16> [[TMP14]], 21803; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X3_T]] [[TMP8]], <4 x i16> [[TMP9]], 21804; CHECK-NEXT:    store { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP16]], ptr @__msan_retval_tls, align 81805; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X4X3_T]] [[TMP10]]1806;1807  %tmpvar2 = call %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld3r.v4i16.p0(ptr %A)1808  ret %struct.__neon_int16x4x3_t  %tmpvar21809}1810 1811define %struct.__neon_int16x4x4_t @ld4r_4h(ptr %A) nounwind #0 {1812; Make sure we are using the operands defined by the ABI1813; CHECK-LABEL: define %struct.__neon_int16x4x4_t @ld4r_4h(1814; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1815; CHECK-NEXT:    call void @llvm.donothing()1816; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641817; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761818; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1819; CHECK-NEXT:    [[TMP13:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4r.v4i16.p0(ptr [[TMP3]])1820; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld4r.v4i16.p0(ptr [[A]])1821; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 01822; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 01823; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } { <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1) }, <4 x i16> [[TMP15]], 01824; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T:%.*]] poison, <4 x i16> [[TMP5]], 01825; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 11826; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 11827; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP17]], <4 x i16> [[TMP19]], 11828; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T]] [[TMP6]], <4 x i16> [[TMP7]], 11829; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 21830; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 21831; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP21]], <4 x i16> [[TMP14]], 21832; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T]] [[TMP8]], <4 x i16> [[TMP9]], 21833; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 31834; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 31835; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP16]], <4 x i16> [[TMP18]], 31836; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T]] [[TMP10]], <4 x i16> [[TMP11]], 31837; CHECK-NEXT:    store { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP20]], ptr @__msan_retval_tls, align 81838; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X4X4_T]] [[TMP12]]1839;1840  %tmpvar2 = call %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld4r.v4i16.p0(ptr %A)1841  ret %struct.__neon_int16x4x4_t  %tmpvar21842}1843 1844declare %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld2r.v4i16.p0(ptr) nounwind readonly1845declare %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld3r.v4i16.p0(ptr) nounwind readonly1846declare %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld4r.v4i16.p0(ptr) nounwind readonly1847 1848define %struct.__neon_int16x8x2_t @ld2r_8h(ptr %A) nounwind #0 {1849; Make sure we are using the operands defined by the ABI1850; CHECK-LABEL: define %struct.__neon_int16x8x2_t @ld2r_8h(1851; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1852; CHECK-NEXT:    call void @llvm.donothing()1853; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641854; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761855; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1856; CHECK-NEXT:    [[TMP9:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2r.v8i16.p0(ptr [[TMP3]])1857; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld2r.v8i16.p0(ptr [[A]])1858; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP9]], 01859; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP4]], 01860; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP11]], 01861; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X2_T:%.*]] poison, <8 x i16> [[TMP5]], 01862; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP9]], 11863; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP4]], 11864; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i16>, <8 x i16> } [[TMP13]], <8 x i16> [[TMP10]], 11865; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X2_T]] [[TMP6]], <8 x i16> [[TMP7]], 11866; CHECK-NEXT:    store { <8 x i16>, <8 x i16> } [[TMP12]], ptr @__msan_retval_tls, align 81867; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X2_T]] [[TMP8]]1868;1869  %tmpvar2 = call %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2r.v8i16.p0(ptr %A)1870  ret %struct.__neon_int16x8x2_t  %tmpvar21871}1872 1873define %struct.__neon_int16x8x3_t @ld3r_8h(ptr %A) nounwind #0 {1874; Make sure we are using the operands defined by the ABI1875; CHECK-LABEL: define %struct.__neon_int16x8x3_t @ld3r_8h(1876; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1877; CHECK-NEXT:    call void @llvm.donothing()1878; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641879; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761880; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1881; CHECK-NEXT:    [[TMP11:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3r.v8i16.p0(ptr [[TMP3]])1882; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld3r.v8i16.p0(ptr [[A]])1883; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP11]], 01884; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 01885; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP13]], 01886; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T:%.*]] poison, <8 x i16> [[TMP5]], 01887; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP11]], 11888; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 11889; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP15]], <8 x i16> [[TMP17]], 11890; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T]] [[TMP6]], <8 x i16> [[TMP7]], 11891; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP11]], 21892; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 21893; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP12]], <8 x i16> [[TMP14]], 21894; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T]] [[TMP8]], <8 x i16> [[TMP9]], 21895; CHECK-NEXT:    store { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP16]], ptr @__msan_retval_tls, align 81896; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X3_T]] [[TMP10]]1897;1898  %tmpvar2 = call %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld3r.v8i16.p0(ptr %A)1899  ret %struct.__neon_int16x8x3_t  %tmpvar21900}1901 1902define %struct.__neon_int16x8x4_t @ld4r_8h(ptr %A) nounwind #0 {1903; Make sure we are using the operands defined by the ABI1904; CHECK-LABEL: define %struct.__neon_int16x8x4_t @ld4r_8h(1905; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1906; CHECK-NEXT:    call void @llvm.donothing()1907; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641908; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761909; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1910; CHECK-NEXT:    [[TMP13:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4r.v8i16.p0(ptr [[TMP3]])1911; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld4r.v8i16.p0(ptr [[A]])1912; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 01913; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 01914; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP15]], 01915; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T:%.*]] poison, <8 x i16> [[TMP5]], 01916; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 11917; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 11918; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP17]], <8 x i16> [[TMP19]], 11919; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP6]], <8 x i16> [[TMP7]], 11920; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 21921; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 21922; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP21]], <8 x i16> [[TMP14]], 21923; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP8]], <8 x i16> [[TMP9]], 21924; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 31925; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 31926; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP16]], <8 x i16> [[TMP18]], 31927; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP10]], <8 x i16> [[TMP11]], 31928; CHECK-NEXT:    store { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP20]], ptr @__msan_retval_tls, align 81929; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X4_T]] [[TMP12]]1930;1931  %tmpvar2 = call %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld4r.v8i16.p0(ptr %A)1932  ret %struct.__neon_int16x8x4_t  %tmpvar21933}1934 1935declare %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2r.v8i16.p0(ptr) nounwind readonly1936declare %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld3r.v8i16.p0(ptr) nounwind readonly1937declare %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld4r.v8i16.p0(ptr) nounwind readonly1938 1939define %struct.__neon_int32x2x2_t @ld2r_2s(ptr %A) nounwind #0 {1940; Make sure we are using the operands defined by the ABI1941; CHECK-LABEL: define %struct.__neon_int32x2x2_t @ld2r_2s(1942; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1943; CHECK-NEXT:    call void @llvm.donothing()1944; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641945; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761946; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1947; CHECK-NEXT:    [[TMP9:%.*]] = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2r.v2i32.p0(ptr [[TMP3]])1948; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld2r.v2i32.p0(ptr [[A]])1949; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP9]], 01950; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP4]], 01951; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP11]], 01952; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X2_T:%.*]] poison, <2 x i32> [[TMP5]], 01953; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP9]], 11954; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP4]], 11955; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i32>, <2 x i32> } [[TMP13]], <2 x i32> [[TMP10]], 11956; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X2_T]] [[TMP6]], <2 x i32> [[TMP7]], 11957; CHECK-NEXT:    store { <2 x i32>, <2 x i32> } [[TMP12]], ptr @__msan_retval_tls, align 81958; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X2X2_T]] [[TMP8]]1959;1960  %tmpvar2 = call %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld2r.v2i32.p0(ptr %A)1961  ret %struct.__neon_int32x2x2_t  %tmpvar21962}1963 1964define %struct.__neon_int32x2x3_t @ld3r_2s(ptr %A) nounwind #0 {1965; Make sure we are using the operands defined by the ABI1966; CHECK-LABEL: define %struct.__neon_int32x2x3_t @ld3r_2s(1967; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1968; CHECK-NEXT:    call void @llvm.donothing()1969; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641970; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885761971; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr1972; CHECK-NEXT:    [[TMP11:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3r.v2i32.p0(ptr [[TMP3]])1973; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld3r.v2i32.p0(ptr [[A]])1974; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 01975; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 01976; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP13]], 01977; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X3_T:%.*]] poison, <2 x i32> [[TMP5]], 01978; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 11979; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 11980; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP15]], <2 x i32> [[TMP17]], 11981; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X3_T]] [[TMP6]], <2 x i32> [[TMP7]], 11982; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 21983; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 21984; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP12]], <2 x i32> [[TMP14]], 21985; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X3_T]] [[TMP8]], <2 x i32> [[TMP9]], 21986; CHECK-NEXT:    store { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP16]], ptr @__msan_retval_tls, align 81987; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X2X3_T]] [[TMP10]]1988;1989  %tmpvar2 = call %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld3r.v2i32.p0(ptr %A)1990  ret %struct.__neon_int32x2x3_t  %tmpvar21991}1992 1993define %struct.__neon_int32x2x4_t @ld4r_2s(ptr %A) nounwind #0 {1994; Make sure we are using the operands defined by the ABI1995; CHECK-LABEL: define %struct.__neon_int32x2x4_t @ld4r_2s(1996; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {1997; CHECK-NEXT:    call void @llvm.donothing()1998; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i641999; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762000; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2001; CHECK-NEXT:    [[TMP13:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4r.v2i32.p0(ptr [[TMP3]])2002; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld4r.v2i32.p0(ptr [[A]])2003; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 02004; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 02005; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP15]], 02006; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T:%.*]] poison, <2 x i32> [[TMP5]], 02007; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 12008; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 12009; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP17]], <2 x i32> [[TMP19]], 12010; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T]] [[TMP6]], <2 x i32> [[TMP7]], 12011; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 22012; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 22013; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP21]], <2 x i32> [[TMP14]], 22014; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T]] [[TMP8]], <2 x i32> [[TMP9]], 22015; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 32016; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 32017; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP16]], <2 x i32> [[TMP18]], 32018; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T]] [[TMP10]], <2 x i32> [[TMP11]], 32019; CHECK-NEXT:    store { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP20]], ptr @__msan_retval_tls, align 82020; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X2X4_T]] [[TMP12]]2021;2022  %tmpvar2 = call %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld4r.v2i32.p0(ptr %A)2023  ret %struct.__neon_int32x2x4_t  %tmpvar22024}2025 2026declare %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld2r.v2i32.p0(ptr) nounwind readonly2027declare %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld3r.v2i32.p0(ptr) nounwind readonly2028declare %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld4r.v2i32.p0(ptr) nounwind readonly2029 2030define %struct.__neon_int32x4x2_t @ld2r_4s(ptr %A) nounwind #0 {2031; Make sure we are using the operands defined by the ABI2032; CHECK-LABEL: define %struct.__neon_int32x4x2_t @ld2r_4s(2033; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {2034; CHECK-NEXT:    call void @llvm.donothing()2035; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i642036; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762037; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2038; CHECK-NEXT:    [[TMP9:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2r.v4i32.p0(ptr [[TMP3]])2039; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld2r.v4i32.p0(ptr [[A]])2040; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP9]], 02041; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP4]], 02042; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP11]], 02043; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X2_T:%.*]] poison, <4 x i32> [[TMP5]], 02044; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP9]], 12045; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP4]], 12046; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i32>, <4 x i32> } [[TMP13]], <4 x i32> [[TMP10]], 12047; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X2_T]] [[TMP6]], <4 x i32> [[TMP7]], 12048; CHECK-NEXT:    store { <4 x i32>, <4 x i32> } [[TMP12]], ptr @__msan_retval_tls, align 82049; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X2_T]] [[TMP8]]2050;2051  %tmpvar2 = call %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2r.v4i32.p0(ptr %A)2052  ret %struct.__neon_int32x4x2_t  %tmpvar22053}2054 2055define %struct.__neon_int32x4x3_t @ld3r_4s(ptr %A) nounwind #0 {2056; Make sure we are using the operands defined by the ABI2057; CHECK-LABEL: define %struct.__neon_int32x4x3_t @ld3r_4s(2058; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {2059; CHECK-NEXT:    call void @llvm.donothing()2060; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i642061; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762062; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2063; CHECK-NEXT:    [[TMP11:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3r.v4i32.p0(ptr [[TMP3]])2064; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld3r.v4i32.p0(ptr [[A]])2065; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 02066; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 02067; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP13]], 02068; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T:%.*]] poison, <4 x i32> [[TMP5]], 02069; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 12070; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 12071; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP15]], <4 x i32> [[TMP17]], 12072; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T]] [[TMP6]], <4 x i32> [[TMP7]], 12073; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 22074; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 22075; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP12]], <4 x i32> [[TMP14]], 22076; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T]] [[TMP8]], <4 x i32> [[TMP9]], 22077; CHECK-NEXT:    store { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP16]], ptr @__msan_retval_tls, align 82078; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X3_T]] [[TMP10]]2079;2080  %tmpvar2 = call %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld3r.v4i32.p0(ptr %A)2081  ret %struct.__neon_int32x4x3_t  %tmpvar22082}2083 2084define %struct.__neon_int32x4x4_t @ld4r_4s(ptr %A) nounwind #0 {2085; Make sure we are using the operands defined by the ABI2086; CHECK-LABEL: define %struct.__neon_int32x4x4_t @ld4r_4s(2087; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {2088; CHECK-NEXT:    call void @llvm.donothing()2089; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i642090; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762091; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2092; CHECK-NEXT:    [[TMP13:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4r.v4i32.p0(ptr [[TMP3]])2093; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld4r.v4i32.p0(ptr [[A]])2094; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 02095; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 02096; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP15]], 02097; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T:%.*]] poison, <4 x i32> [[TMP5]], 02098; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 12099; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 12100; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP17]], <4 x i32> [[TMP19]], 12101; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP6]], <4 x i32> [[TMP7]], 12102; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 22103; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 22104; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP21]], <4 x i32> [[TMP14]], 22105; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP8]], <4 x i32> [[TMP9]], 22106; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 32107; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 32108; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP16]], <4 x i32> [[TMP18]], 32109; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP10]], <4 x i32> [[TMP11]], 32110; CHECK-NEXT:    store { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP20]], ptr @__msan_retval_tls, align 82111; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X4_T]] [[TMP12]]2112;2113  %tmpvar2 = call %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld4r.v4i32.p0(ptr %A)2114  ret %struct.__neon_int32x4x4_t  %tmpvar22115}2116 2117declare %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2r.v4i32.p0(ptr) nounwind readonly2118declare %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld3r.v4i32.p0(ptr) nounwind readonly2119declare %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld4r.v4i32.p0(ptr) nounwind readonly2120 2121define %struct.__neon_int64x1x2_t @ld2r_1d(ptr %A) nounwind #0 {2122; Make sure we are using the operands defined by the ABI2123; CHECK-LABEL: define %struct.__neon_int64x1x2_t @ld2r_1d(2124; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {2125; CHECK-NEXT:    call void @llvm.donothing()2126; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i642127; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762128; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2129; CHECK-NEXT:    [[TMP9:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2r.v1i64.p0(ptr [[TMP3]])2130; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld2r.v1i64.p0(ptr [[A]])2131; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP9]], 02132; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP4]], 02133; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP11]], 02134; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X2_T:%.*]] poison, <1 x i64> [[TMP5]], 02135; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP9]], 12136; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP4]], 12137; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <1 x i64>, <1 x i64> } [[TMP13]], <1 x i64> [[TMP10]], 12138; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X2_T]] [[TMP6]], <1 x i64> [[TMP7]], 12139; CHECK-NEXT:    store { <1 x i64>, <1 x i64> } [[TMP12]], ptr @__msan_retval_tls, align 82140; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X1X2_T]] [[TMP8]]2141;2142  %tmpvar2 = call %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld2r.v1i64.p0(ptr %A)2143  ret %struct.__neon_int64x1x2_t  %tmpvar22144}2145 2146define %struct.__neon_int64x1x3_t @ld3r_1d(ptr %A) nounwind #0 {2147; Make sure we are using the operands defined by the ABI2148; CHECK-LABEL: define %struct.__neon_int64x1x3_t @ld3r_1d(2149; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {2150; CHECK-NEXT:    call void @llvm.donothing()2151; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i642152; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762153; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2154; CHECK-NEXT:    [[TMP11:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3r.v1i64.p0(ptr [[TMP3]])2155; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld3r.v1i64.p0(ptr [[A]])2156; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 02157; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 02158; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP13]], 02159; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X3_T:%.*]] poison, <1 x i64> [[TMP5]], 02160; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 12161; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 12162; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP15]], <1 x i64> [[TMP17]], 12163; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X3_T]] [[TMP6]], <1 x i64> [[TMP7]], 12164; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 22165; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 22166; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP12]], <1 x i64> [[TMP14]], 22167; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X3_T]] [[TMP8]], <1 x i64> [[TMP9]], 22168; CHECK-NEXT:    store { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP16]], ptr @__msan_retval_tls, align 82169; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X1X3_T]] [[TMP10]]2170;2171  %tmpvar2 = call %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld3r.v1i64.p0(ptr %A)2172  ret %struct.__neon_int64x1x3_t  %tmpvar22173}2174 2175define %struct.__neon_int64x1x4_t @ld4r_1d(ptr %A) nounwind #0 {2176; Make sure we are using the operands defined by the ABI2177; CHECK-LABEL: define %struct.__neon_int64x1x4_t @ld4r_1d(2178; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {2179; CHECK-NEXT:    call void @llvm.donothing()2180; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i642181; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762182; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2183; CHECK-NEXT:    [[TMP13:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4r.v1i64.p0(ptr [[TMP3]])2184; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld4r.v1i64.p0(ptr [[A]])2185; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 02186; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 02187; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP15]], 02188; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T:%.*]] poison, <1 x i64> [[TMP5]], 02189; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 12190; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 12191; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP17]], <1 x i64> [[TMP19]], 12192; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T]] [[TMP6]], <1 x i64> [[TMP7]], 12193; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 22194; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 22195; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP21]], <1 x i64> [[TMP14]], 22196; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T]] [[TMP8]], <1 x i64> [[TMP9]], 22197; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 32198; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 32199; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP16]], <1 x i64> [[TMP18]], 32200; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T]] [[TMP10]], <1 x i64> [[TMP11]], 32201; CHECK-NEXT:    store { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP20]], ptr @__msan_retval_tls, align 82202; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X1X4_T]] [[TMP12]]2203;2204  %tmpvar2 = call %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld4r.v1i64.p0(ptr %A)2205  ret %struct.__neon_int64x1x4_t  %tmpvar22206}2207 2208declare %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld2r.v1i64.p0(ptr) nounwind readonly2209declare %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld3r.v1i64.p0(ptr) nounwind readonly2210declare %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld4r.v1i64.p0(ptr) nounwind readonly2211 2212define %struct.__neon_int64x2x2_t @ld2r_2d(ptr %A) nounwind #0 {2213; Make sure we are using the operands defined by the ABI2214; CHECK-LABEL: define %struct.__neon_int64x2x2_t @ld2r_2d(2215; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {2216; CHECK-NEXT:    call void @llvm.donothing()2217; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i642218; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762219; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2220; CHECK-NEXT:    [[TMP9:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2r.v2i64.p0(ptr [[TMP3]])2221; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld2r.v2i64.p0(ptr [[A]])2222; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP9]], 02223; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP4]], 02224; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP11]], 02225; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X2_T:%.*]] poison, <2 x i64> [[TMP5]], 02226; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP9]], 12227; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP4]], 12228; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i64>, <2 x i64> } [[TMP13]], <2 x i64> [[TMP10]], 12229; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X2_T]] [[TMP6]], <2 x i64> [[TMP7]], 12230; CHECK-NEXT:    store { <2 x i64>, <2 x i64> } [[TMP12]], ptr @__msan_retval_tls, align 82231; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X2_T]] [[TMP8]]2232;2233  %tmpvar2 = call %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2r.v2i64.p0(ptr %A)2234  ret %struct.__neon_int64x2x2_t  %tmpvar22235}2236 2237define %struct.__neon_int64x2x3_t @ld3r_2d(ptr %A) nounwind #0 {2238; Make sure we are using the operands defined by the ABI2239; CHECK-LABEL: define %struct.__neon_int64x2x3_t @ld3r_2d(2240; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {2241; CHECK-NEXT:    call void @llvm.donothing()2242; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i642243; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762244; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2245; CHECK-NEXT:    [[TMP11:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3r.v2i64.p0(ptr [[TMP3]])2246; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld3r.v2i64.p0(ptr [[A]])2247; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 02248; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 02249; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP13]], 02250; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T:%.*]] poison, <2 x i64> [[TMP5]], 02251; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 12252; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 12253; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP15]], <2 x i64> [[TMP17]], 12254; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T]] [[TMP6]], <2 x i64> [[TMP7]], 12255; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 22256; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 22257; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP12]], <2 x i64> [[TMP14]], 22258; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T]] [[TMP8]], <2 x i64> [[TMP9]], 22259; CHECK-NEXT:    store { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP16]], ptr @__msan_retval_tls, align 82260; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X3_T]] [[TMP10]]2261;2262  %tmpvar2 = call %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld3r.v2i64.p0(ptr %A)2263  ret %struct.__neon_int64x2x3_t  %tmpvar22264}2265 2266define %struct.__neon_int64x2x4_t @ld4r_2d(ptr %A) nounwind #0 {2267; Make sure we are using the operands defined by the ABI2268; CHECK-LABEL: define %struct.__neon_int64x2x4_t @ld4r_2d(2269; CHECK-SAME: ptr [[A:%.*]]) #[[ATTR0]] {2270; CHECK-NEXT:    call void @llvm.donothing()2271; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[A]] to i642272; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762273; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2274; CHECK-NEXT:    [[TMP13:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4r.v2i64.p0(ptr [[TMP3]])2275; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld4r.v2i64.p0(ptr [[A]])2276; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 02277; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 02278; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP15]], 02279; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T:%.*]] poison, <2 x i64> [[TMP5]], 02280; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 12281; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 12282; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP17]], <2 x i64> [[TMP19]], 12283; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP6]], <2 x i64> [[TMP7]], 12284; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 22285; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 22286; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP21]], <2 x i64> [[TMP14]], 22287; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP8]], <2 x i64> [[TMP9]], 22288; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 32289; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 32290; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP16]], <2 x i64> [[TMP18]], 32291; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP10]], <2 x i64> [[TMP11]], 32292; CHECK-NEXT:    store { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP20]], ptr @__msan_retval_tls, align 82293; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X4_T]] [[TMP12]]2294;2295  %tmpvar2 = call %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld4r.v2i64.p0(ptr %A)2296  ret %struct.__neon_int64x2x4_t  %tmpvar22297}2298 2299declare %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2r.v2i64.p0(ptr) nounwind readonly2300declare %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld3r.v2i64.p0(ptr) nounwind readonly2301declare %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld4r.v2i64.p0(ptr) nounwind readonly2302 2303define <16 x i8> @ld1_16b(<16 x i8> %V, ptr %bar) #0 {2304; Make sure we are using the operands defined by the ABI2305; CHECK-LABEL: define <16 x i8> @ld1_16b(2306; CHECK-SAME: <16 x i8> [[V:%.*]], ptr [[BAR:%.*]]) #[[ATTR1]] {2307; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 82308; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 82309; CHECK-NEXT:    call void @llvm.donothing()2310; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 02311; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]2312; CHECK:       3:2313; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2314; CHECK-NEXT:    unreachable2315; CHECK:       4:2316; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i8, ptr [[BAR]], align 12317; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[BAR]] to i642318; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885762319; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr2320; CHECK-NEXT:    [[_MSLD:%.*]] = load i8, ptr [[TMP7]], align 12321; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <16 x i8> [[TMP2]], i8 [[_MSLD]], i32 02322; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <16 x i8> [[V]], i8 [[TMPVAR1]], i32 02323; CHECK-NEXT:    store <16 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 82324; CHECK-NEXT:    ret <16 x i8> [[TMPVAR2]]2325;2326  %tmpvar1 = load i8, ptr %bar2327  %tmpvar2 = insertelement <16 x i8> %V, i8 %tmpvar1, i32 02328  ret <16 x i8> %tmpvar22329}2330 2331define <8 x i16> @ld1_8h(<8 x i16> %V, ptr %bar) #0 {2332; Make sure we are using the operands defined by the ABI2333; CHECK-LABEL: define <8 x i16> @ld1_8h(2334; CHECK-SAME: <8 x i16> [[V:%.*]], ptr [[BAR:%.*]]) #[[ATTR1]] {2335; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 82336; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 82337; CHECK-NEXT:    call void @llvm.donothing()2338; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 02339; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]2340; CHECK:       3:2341; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2342; CHECK-NEXT:    unreachable2343; CHECK:       4:2344; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i16, ptr [[BAR]], align 22345; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[BAR]] to i642346; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885762347; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr2348; CHECK-NEXT:    [[_MSLD:%.*]] = load i16, ptr [[TMP7]], align 22349; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <8 x i16> [[TMP2]], i16 [[_MSLD]], i32 02350; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <8 x i16> [[V]], i16 [[TMPVAR1]], i32 02351; CHECK-NEXT:    store <8 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 82352; CHECK-NEXT:    ret <8 x i16> [[TMPVAR2]]2353;2354  %tmpvar1 = load i16, ptr %bar2355  %tmpvar2 = insertelement <8 x i16> %V, i16 %tmpvar1, i32 02356  ret <8 x i16> %tmpvar22357}2358 2359define <4 x i32> @ld1_4s(<4 x i32> %V, ptr %bar) #0 {2360; Make sure we are using the operands defined by the ABI2361; CHECK-LABEL: define <4 x i32> @ld1_4s(2362; CHECK-SAME: <4 x i32> [[V:%.*]], ptr [[BAR:%.*]]) #[[ATTR1]] {2363; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 82364; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 82365; CHECK-NEXT:    call void @llvm.donothing()2366; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 02367; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]2368; CHECK:       3:2369; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2370; CHECK-NEXT:    unreachable2371; CHECK:       4:2372; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i32, ptr [[BAR]], align 42373; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[BAR]] to i642374; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885762375; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr2376; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP7]], align 42377; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <4 x i32> [[TMP2]], i32 [[_MSLD]], i32 02378; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <4 x i32> [[V]], i32 [[TMPVAR1]], i32 02379; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 82380; CHECK-NEXT:    ret <4 x i32> [[TMPVAR2]]2381;2382  %tmpvar1 = load i32, ptr %bar2383  %tmpvar2 = insertelement <4 x i32> %V, i32 %tmpvar1, i32 02384  ret <4 x i32> %tmpvar22385}2386 2387define <4 x float> @ld1_4s_float(<4 x float> %V, ptr %bar) #0 {2388; Make sure we are using the operands defined by the ABI2389; CHECK-LABEL: define <4 x float> @ld1_4s_float(2390; CHECK-SAME: <4 x float> [[V:%.*]], ptr [[BAR:%.*]]) #[[ATTR1]] {2391; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 82392; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i32>, ptr @__msan_param_tls, align 82393; CHECK-NEXT:    call void @llvm.donothing()2394; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 02395; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]2396; CHECK:       3:2397; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2398; CHECK-NEXT:    unreachable2399; CHECK:       4:2400; CHECK-NEXT:    [[TMPVAR1:%.*]] = load float, ptr [[BAR]], align 42401; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[BAR]] to i642402; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885762403; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr2404; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP7]], align 42405; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <4 x i32> [[TMP2]], i32 [[_MSLD]], i32 02406; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <4 x float> [[V]], float [[TMPVAR1]], i32 02407; CHECK-NEXT:    store <4 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 82408; CHECK-NEXT:    ret <4 x float> [[TMPVAR2]]2409;2410  %tmpvar1 = load float, ptr %bar2411  %tmpvar2 = insertelement <4 x float> %V, float %tmpvar1, i32 02412  ret <4 x float> %tmpvar22413}2414 2415define <2 x i64> @ld1_2d(<2 x i64> %V, ptr %bar) #0 {2416; Make sure we are using the operands defined by the ABI2417; CHECK-LABEL: define <2 x i64> @ld1_2d(2418; CHECK-SAME: <2 x i64> [[V:%.*]], ptr [[BAR:%.*]]) #[[ATTR1]] {2419; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 82420; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 82421; CHECK-NEXT:    call void @llvm.donothing()2422; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 02423; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]2424; CHECK:       3:2425; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2426; CHECK-NEXT:    unreachable2427; CHECK:       4:2428; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i64, ptr [[BAR]], align 82429; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[BAR]] to i642430; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885762431; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr2432; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP7]], align 82433; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <2 x i64> [[TMP2]], i64 [[_MSLD]], i32 02434; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <2 x i64> [[V]], i64 [[TMPVAR1]], i32 02435; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 82436; CHECK-NEXT:    ret <2 x i64> [[TMPVAR2]]2437;2438  %tmpvar1 = load i64, ptr %bar2439  %tmpvar2 = insertelement <2 x i64> %V, i64 %tmpvar1, i32 02440  ret <2 x i64> %tmpvar22441}2442 2443define <2 x double> @ld1_2d_double(<2 x double> %V, ptr %bar) #0 {2444; Make sure we are using the operands defined by the ABI2445; CHECK-LABEL: define <2 x double> @ld1_2d_double(2446; CHECK-SAME: <2 x double> [[V:%.*]], ptr [[BAR:%.*]]) #[[ATTR1]] {2447; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 82448; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i64>, ptr @__msan_param_tls, align 82449; CHECK-NEXT:    call void @llvm.donothing()2450; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 02451; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]2452; CHECK:       3:2453; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2454; CHECK-NEXT:    unreachable2455; CHECK:       4:2456; CHECK-NEXT:    [[TMPVAR1:%.*]] = load double, ptr [[BAR]], align 82457; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[BAR]] to i642458; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885762459; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr2460; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP7]], align 82461; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <2 x i64> [[TMP2]], i64 [[_MSLD]], i32 02462; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <2 x double> [[V]], double [[TMPVAR1]], i32 02463; CHECK-NEXT:    store <2 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 82464; CHECK-NEXT:    ret <2 x double> [[TMPVAR2]]2465;2466  %tmpvar1 = load double, ptr %bar2467  %tmpvar2 = insertelement <2 x double> %V, double %tmpvar1, i32 02468  ret <2 x double> %tmpvar22469}2470 2471define <1 x i64> @ld1_1d(ptr %p) #0 {2472; Make sure we are using the operands defined by the ABI2473; CHECK-LABEL: define <1 x i64> @ld1_1d(2474; CHECK-SAME: ptr [[P:%.*]]) #[[ATTR1]] {2475; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr @__msan_param_tls, align 82476; CHECK-NEXT:    call void @llvm.donothing()2477; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 02478; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP2:%.*]], label [[TMP3:%.*]], !prof [[PROF1]]2479; CHECK:       2:2480; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2481; CHECK-NEXT:    unreachable2482; CHECK:       3:2483; CHECK-NEXT:    [[TMPVAR:%.*]] = load <1 x i64>, ptr [[P]], align 82484; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[P]] to i642485; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885762486; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr2487; CHECK-NEXT:    [[_MSLD:%.*]] = load <1 x i64>, ptr [[TMP6]], align 82488; CHECK-NEXT:    store <1 x i64> [[_MSLD]], ptr @__msan_retval_tls, align 82489; CHECK-NEXT:    ret <1 x i64> [[TMPVAR]]2490;2491  %tmpvar = load <1 x i64>, ptr %p, align 82492  ret <1 x i64> %tmpvar2493}2494 2495define <8 x i8> @ld1_8b(<8 x i8> %V, ptr %bar) #0 {2496; Make sure we are using the operands defined by the ABI2497; CHECK-LABEL: define <8 x i8> @ld1_8b(2498; CHECK-SAME: <8 x i8> [[V:%.*]], ptr [[BAR:%.*]]) #[[ATTR1]] {2499; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 82500; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr @__msan_param_tls, align 82501; CHECK-NEXT:    call void @llvm.donothing()2502; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 02503; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]2504; CHECK:       3:2505; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2506; CHECK-NEXT:    unreachable2507; CHECK:       4:2508; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i8, ptr [[BAR]], align 12509; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[BAR]] to i642510; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885762511; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr2512; CHECK-NEXT:    [[_MSLD:%.*]] = load i8, ptr [[TMP7]], align 12513; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <8 x i8> [[TMP2]], i8 [[_MSLD]], i32 02514; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <8 x i8> [[V]], i8 [[TMPVAR1]], i32 02515; CHECK-NEXT:    store <8 x i8> [[_MSPROP]], ptr @__msan_retval_tls, align 82516; CHECK-NEXT:    ret <8 x i8> [[TMPVAR2]]2517;2518  %tmpvar1 = load i8, ptr %bar2519  %tmpvar2 = insertelement <8 x i8> %V, i8 %tmpvar1, i32 02520  ret <8 x i8> %tmpvar22521}2522 2523define <4 x i16> @ld1_4h(<4 x i16> %V, ptr %bar) #0 {2524; Make sure we are using the operands defined by the ABI2525; CHECK-LABEL: define <4 x i16> @ld1_4h(2526; CHECK-SAME: <4 x i16> [[V:%.*]], ptr [[BAR:%.*]]) #[[ATTR1]] {2527; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 82528; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 82529; CHECK-NEXT:    call void @llvm.donothing()2530; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 02531; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]2532; CHECK:       3:2533; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2534; CHECK-NEXT:    unreachable2535; CHECK:       4:2536; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i16, ptr [[BAR]], align 22537; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[BAR]] to i642538; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885762539; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr2540; CHECK-NEXT:    [[_MSLD:%.*]] = load i16, ptr [[TMP7]], align 22541; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <4 x i16> [[TMP2]], i16 [[_MSLD]], i32 02542; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <4 x i16> [[V]], i16 [[TMPVAR1]], i32 02543; CHECK-NEXT:    store <4 x i16> [[_MSPROP]], ptr @__msan_retval_tls, align 82544; CHECK-NEXT:    ret <4 x i16> [[TMPVAR2]]2545;2546  %tmpvar1 = load i16, ptr %bar2547  %tmpvar2 = insertelement <4 x i16> %V, i16 %tmpvar1, i32 02548  ret <4 x i16> %tmpvar22549}2550 2551define <2 x i32> @ld1_2s(<2 x i32> %V, ptr %bar) #0 {2552; Make sure we are using the operands defined by the ABI2553; CHECK-LABEL: define <2 x i32> @ld1_2s(2554; CHECK-SAME: <2 x i32> [[V:%.*]], ptr [[BAR:%.*]]) #[[ATTR1]] {2555; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 82556; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 82557; CHECK-NEXT:    call void @llvm.donothing()2558; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 02559; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]2560; CHECK:       3:2561; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2562; CHECK-NEXT:    unreachable2563; CHECK:       4:2564; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i32, ptr [[BAR]], align 42565; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[BAR]] to i642566; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885762567; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr2568; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP7]], align 42569; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <2 x i32> [[TMP2]], i32 [[_MSLD]], i32 02570; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <2 x i32> [[V]], i32 [[TMPVAR1]], i32 02571; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 82572; CHECK-NEXT:    ret <2 x i32> [[TMPVAR2]]2573;2574  %tmpvar1 = load i32, ptr %bar2575  %tmpvar2 = insertelement <2 x i32> %V, i32 %tmpvar1, i32 02576  ret <2 x i32> %tmpvar22577}2578 2579define <2 x float> @ld1_2s_float(<2 x float> %V, ptr %bar) #0 {2580; Make sure we are using the operands defined by the ABI2581; CHECK-LABEL: define <2 x float> @ld1_2s_float(2582; CHECK-SAME: <2 x float> [[V:%.*]], ptr [[BAR:%.*]]) #[[ATTR1]] {2583; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 82584; CHECK-NEXT:    [[TMP2:%.*]] = load <2 x i32>, ptr @__msan_param_tls, align 82585; CHECK-NEXT:    call void @llvm.donothing()2586; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP1]], 02587; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]2588; CHECK:       3:2589; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2590; CHECK-NEXT:    unreachable2591; CHECK:       4:2592; CHECK-NEXT:    [[TMPVAR1:%.*]] = load float, ptr [[BAR]], align 42593; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[BAR]] to i642594; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885762595; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr2596; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP7]], align 42597; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <2 x i32> [[TMP2]], i32 [[_MSLD]], i32 02598; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <2 x float> [[V]], float [[TMPVAR1]], i32 02599; CHECK-NEXT:    store <2 x i32> [[_MSPROP]], ptr @__msan_retval_tls, align 82600; CHECK-NEXT:    ret <2 x float> [[TMPVAR2]]2601;2602  %tmpvar1 = load float, ptr %bar2603  %tmpvar2 = insertelement <2 x float> %V, float %tmpvar1, i32 02604  ret <2 x float> %tmpvar22605}2606 2607 2608; Add rdar://13098923 test case: vld1_dup_u32 doesn't generate ld1r.2s2609define void @ld1r_2s_from_dup(ptr nocapture %a, ptr nocapture %b, ptr nocapture %diff) nounwind ssp #0 {2610; CHECK-LABEL: define void @ld1r_2s_from_dup(2611; CHECK-SAME: ptr captures(none) [[A:%.*]], ptr captures(none) [[B:%.*]], ptr captures(none) [[DIFF:%.*]]) #[[ATTR2:[0-9]+]] {2612; CHECK-NEXT:  entry:2613; CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 82614; CHECK-NEXT:    [[TMP1:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 8), align 82615; CHECK-NEXT:    [[TMP2:%.*]] = load i64, ptr getelementptr (i8, ptr @__msan_param_tls, i64 16), align 82616; CHECK-NEXT:    call void @llvm.donothing()2617; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP0]], 02618; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP3:%.*]], label [[TMP4:%.*]], !prof [[PROF1]]2619; CHECK:       3:2620; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2621; CHECK-NEXT:    unreachable2622; CHECK:       4:2623; CHECK-NEXT:    [[TMPVAR1:%.*]] = load i32, ptr [[A]], align 42624; CHECK-NEXT:    [[TMP5:%.*]] = ptrtoint ptr [[A]] to i642625; CHECK-NEXT:    [[TMP6:%.*]] = xor i64 [[TMP5]], 1935140464885762626; CHECK-NEXT:    [[TMP7:%.*]] = inttoptr i64 [[TMP6]] to ptr2627; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP7]], align 42628; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <2 x i32> splat (i32 -1), i32 [[_MSLD]], i32 02629; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <2 x i32> poison, i32 [[TMPVAR1]], i32 02630; CHECK-NEXT:    [[_MSPROP1:%.*]] = shufflevector <2 x i32> [[_MSPROP]], <2 x i32> splat (i32 -1), <2 x i32> zeroinitializer2631; CHECK-NEXT:    [[LANE:%.*]] = shufflevector <2 x i32> [[TMPVAR2]], <2 x i32> poison, <2 x i32> zeroinitializer2632; CHECK-NEXT:    [[TMP8:%.*]] = bitcast <2 x i32> [[_MSPROP1]] to <8 x i8>2633; CHECK-NEXT:    [[TMPVAR3:%.*]] = bitcast <2 x i32> [[LANE]] to <8 x i8>2634; CHECK-NEXT:    [[_MSCMP9:%.*]] = icmp ne i64 [[TMP1]], 02635; CHECK-NEXT:    br i1 [[_MSCMP9]], label [[TMP9:%.*]], label [[TMP10:%.*]], !prof [[PROF1]]2636; CHECK:       9:2637; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2638; CHECK-NEXT:    unreachable2639; CHECK:       10:2640; CHECK-NEXT:    [[TMPVAR5:%.*]] = load i32, ptr [[B]], align 42641; CHECK-NEXT:    [[TMP11:%.*]] = ptrtoint ptr [[B]] to i642642; CHECK-NEXT:    [[TMP12:%.*]] = xor i64 [[TMP11]], 1935140464885762643; CHECK-NEXT:    [[TMP13:%.*]] = inttoptr i64 [[TMP12]] to ptr2644; CHECK-NEXT:    [[_MSLD2:%.*]] = load i32, ptr [[TMP13]], align 42645; CHECK-NEXT:    [[_MSPROP3:%.*]] = insertelement <2 x i32> splat (i32 -1), i32 [[_MSLD2]], i32 02646; CHECK-NEXT:    [[TMPVAR6:%.*]] = insertelement <2 x i32> poison, i32 [[TMPVAR5]], i32 02647; CHECK-NEXT:    [[_MSPROP4:%.*]] = shufflevector <2 x i32> [[_MSPROP3]], <2 x i32> splat (i32 -1), <2 x i32> zeroinitializer2648; CHECK-NEXT:    [[LANE1:%.*]] = shufflevector <2 x i32> [[TMPVAR6]], <2 x i32> poison, <2 x i32> zeroinitializer2649; CHECK-NEXT:    [[TMP14:%.*]] = bitcast <2 x i32> [[_MSPROP4]] to <8 x i8>2650; CHECK-NEXT:    [[TMPVAR7:%.*]] = bitcast <2 x i32> [[LANE1]] to <8 x i8>2651; CHECK-NEXT:    [[_MSPROP5:%.*]] = zext <8 x i8> [[TMP8]] to <8 x i16>2652; CHECK-NEXT:    [[VMOVL_I_I:%.*]] = zext <8 x i8> [[TMPVAR3]] to <8 x i16>2653; CHECK-NEXT:    [[_MSPROP6:%.*]] = zext <8 x i8> [[TMP14]] to <8 x i16>2654; CHECK-NEXT:    [[VMOVL_I4_I:%.*]] = zext <8 x i8> [[TMPVAR7]] to <8 x i16>2655; CHECK-NEXT:    [[_MSPROP7:%.*]] = or <8 x i16> [[_MSPROP5]], [[_MSPROP6]]2656; CHECK-NEXT:    [[SUB_I:%.*]] = sub <8 x i16> [[VMOVL_I_I]], [[VMOVL_I4_I]]2657; CHECK-NEXT:    [[TMP15:%.*]] = bitcast <8 x i16> [[_MSPROP7]] to <2 x i64>2658; CHECK-NEXT:    [[TMPVAR8:%.*]] = bitcast <8 x i16> [[SUB_I]] to <2 x i64>2659; CHECK-NEXT:    [[_MSPROP8:%.*]] = shufflevector <2 x i64> [[TMP15]], <2 x i64> splat (i64 -1), <1 x i32> zeroinitializer2660; CHECK-NEXT:    [[SHUFFLE_I:%.*]] = shufflevector <2 x i64> [[TMPVAR8]], <2 x i64> poison, <1 x i32> zeroinitializer2661; CHECK-NEXT:    [[TMP16:%.*]] = bitcast <1 x i64> [[_MSPROP8]] to <4 x i16>2662; CHECK-NEXT:    [[TMPVAR9:%.*]] = bitcast <1 x i64> [[SHUFFLE_I]] to <4 x i16>2663; CHECK-NEXT:    [[_MSCMP10:%.*]] = icmp ne i64 [[TMP2]], 02664; CHECK-NEXT:    br i1 [[_MSCMP10]], label [[TMP17:%.*]], label [[TMP18:%.*]], !prof [[PROF1]]2665; CHECK:       17:2666; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2667; CHECK-NEXT:    unreachable2668; CHECK:       18:2669; CHECK-NEXT:    [[TMP19:%.*]] = ptrtoint ptr [[DIFF]] to i642670; CHECK-NEXT:    [[TMP20:%.*]] = xor i64 [[TMP19]], 1935140464885762671; CHECK-NEXT:    [[TMP21:%.*]] = inttoptr i64 [[TMP20]] to ptr2672; CHECK-NEXT:    store <4 x i16> [[TMP16]], ptr [[TMP21]], align 82673; CHECK-NEXT:    store <4 x i16> [[TMPVAR9]], ptr [[DIFF]], align 82674; CHECK-NEXT:    ret void2675;2676entry:2677  %tmpvar1 = load i32, ptr %a, align 42678  %tmpvar2 = insertelement <2 x i32> poison, i32 %tmpvar1, i32 02679  %lane = shufflevector <2 x i32> %tmpvar2, <2 x i32> poison, <2 x i32> zeroinitializer2680  %tmpvar3 = bitcast <2 x i32> %lane to <8 x i8>2681  %tmpvar5 = load i32, ptr %b, align 42682  %tmpvar6 = insertelement <2 x i32> poison, i32 %tmpvar5, i32 02683  %lane1 = shufflevector <2 x i32> %tmpvar6, <2 x i32> poison, <2 x i32> zeroinitializer2684  %tmpvar7 = bitcast <2 x i32> %lane1 to <8 x i8>2685  %vmovl.i.i = zext <8 x i8> %tmpvar3 to <8 x i16>2686  %vmovl.i4.i = zext <8 x i8> %tmpvar7 to <8 x i16>2687  %sub.i = sub <8 x i16> %vmovl.i.i, %vmovl.i4.i2688  %tmpvar8 = bitcast <8 x i16> %sub.i to <2 x i64>2689  %shuffle.i = shufflevector <2 x i64> %tmpvar8, <2 x i64> poison, <1 x i32> zeroinitializer2690  %tmpvar9 = bitcast <1 x i64> %shuffle.i to <4 x i16>2691  store <4 x i16> %tmpvar9, ptr %diff, align 82692  ret void2693}2694 2695; Tests for rdar://11947069: vld1_dup_* and vld1q_dup_* code gen is suboptimal2696define <4 x float> @ld1r_4s_float(ptr nocapture %x) #0 {2697; CHECK-LABEL: define <4 x float> @ld1r_4s_float(2698; CHECK-SAME: ptr captures(none) [[X:%.*]]) #[[ATTR1]] {2699; CHECK-NEXT:  entry:2700; CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 82701; CHECK-NEXT:    call void @llvm.donothing()2702; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP0]], 02703; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP1:%.*]], label [[TMP2:%.*]], !prof [[PROF1]]2704; CHECK:       1:2705; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2706; CHECK-NEXT:    unreachable2707; CHECK:       2:2708; CHECK-NEXT:    [[TMPVAR:%.*]] = load float, ptr [[X]], align 42709; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[X]] to i642710; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 1935140464885762711; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr2712; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP5]], align 42713; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <4 x i32> splat (i32 -1), i32 [[_MSLD]], i32 02714; CHECK-NEXT:    [[TMPVAR1:%.*]] = insertelement <4 x float> poison, float [[TMPVAR]], i32 02715; CHECK-NEXT:    [[_MSPROP1:%.*]] = insertelement <4 x i32> [[_MSPROP]], i32 [[_MSLD]], i32 12716; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <4 x float> [[TMPVAR1]], float [[TMPVAR]], i32 12717; CHECK-NEXT:    [[_MSPROP2:%.*]] = insertelement <4 x i32> [[_MSPROP1]], i32 [[_MSLD]], i32 22718; CHECK-NEXT:    [[TMPVAR3:%.*]] = insertelement <4 x float> [[TMPVAR2]], float [[TMPVAR]], i32 22719; CHECK-NEXT:    [[_MSPROP3:%.*]] = insertelement <4 x i32> [[_MSPROP2]], i32 [[_MSLD]], i32 32720; CHECK-NEXT:    [[TMPVAR4:%.*]] = insertelement <4 x float> [[TMPVAR3]], float [[TMPVAR]], i32 32721; CHECK-NEXT:    store <4 x i32> [[_MSPROP3]], ptr @__msan_retval_tls, align 82722; CHECK-NEXT:    ret <4 x float> [[TMPVAR4]]2723;2724entry:2725; Make sure we are using the operands defined by the ABI2726  %tmpvar = load float, ptr %x, align 42727  %tmpvar1 = insertelement <4 x float> poison, float %tmpvar, i32 02728  %tmpvar2 = insertelement <4 x float> %tmpvar1, float %tmpvar, i32 12729  %tmpvar3 = insertelement <4 x float> %tmpvar2, float %tmpvar, i32 22730  %tmpvar4 = insertelement <4 x float> %tmpvar3, float %tmpvar, i32 32731  ret <4 x float> %tmpvar42732}2733 2734define <2 x float> @ld1r_2s_float(ptr nocapture %x) #0 {2735; CHECK-LABEL: define <2 x float> @ld1r_2s_float(2736; CHECK-SAME: ptr captures(none) [[X:%.*]]) #[[ATTR1]] {2737; CHECK-NEXT:  entry:2738; CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 82739; CHECK-NEXT:    call void @llvm.donothing()2740; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP0]], 02741; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP1:%.*]], label [[TMP2:%.*]], !prof [[PROF1]]2742; CHECK:       1:2743; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2744; CHECK-NEXT:    unreachable2745; CHECK:       2:2746; CHECK-NEXT:    [[TMPVAR:%.*]] = load float, ptr [[X]], align 42747; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[X]] to i642748; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 1935140464885762749; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr2750; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP5]], align 42751; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <2 x i32> splat (i32 -1), i32 [[_MSLD]], i32 02752; CHECK-NEXT:    [[TMPVAR1:%.*]] = insertelement <2 x float> poison, float [[TMPVAR]], i32 02753; CHECK-NEXT:    [[_MSPROP1:%.*]] = insertelement <2 x i32> [[_MSPROP]], i32 [[_MSLD]], i32 12754; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <2 x float> [[TMPVAR1]], float [[TMPVAR]], i32 12755; CHECK-NEXT:    store <2 x i32> [[_MSPROP1]], ptr @__msan_retval_tls, align 82756; CHECK-NEXT:    ret <2 x float> [[TMPVAR2]]2757;2758entry:2759; Make sure we are using the operands defined by the ABI2760  %tmpvar = load float, ptr %x, align 42761  %tmpvar1 = insertelement <2 x float> poison, float %tmpvar, i32 02762  %tmpvar2 = insertelement <2 x float> %tmpvar1, float %tmpvar, i32 12763  ret <2 x float> %tmpvar22764}2765 2766define <2 x double> @ld1r_2d_double(ptr nocapture %x) #0 {2767; CHECK-LABEL: define <2 x double> @ld1r_2d_double(2768; CHECK-SAME: ptr captures(none) [[X:%.*]]) #[[ATTR1]] {2769; CHECK-NEXT:  entry:2770; CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 82771; CHECK-NEXT:    call void @llvm.donothing()2772; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP0]], 02773; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP1:%.*]], label [[TMP2:%.*]], !prof [[PROF1]]2774; CHECK:       1:2775; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2776; CHECK-NEXT:    unreachable2777; CHECK:       2:2778; CHECK-NEXT:    [[TMPVAR:%.*]] = load double, ptr [[X]], align 42779; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[X]] to i642780; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 1935140464885762781; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr2782; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP5]], align 42783; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <2 x i64> splat (i64 -1), i64 [[_MSLD]], i32 02784; CHECK-NEXT:    [[TMPVAR1:%.*]] = insertelement <2 x double> poison, double [[TMPVAR]], i32 02785; CHECK-NEXT:    [[_MSPROP1:%.*]] = insertelement <2 x i64> [[_MSPROP]], i64 [[_MSLD]], i32 12786; CHECK-NEXT:    [[TMPVAR2:%.*]] = insertelement <2 x double> [[TMPVAR1]], double [[TMPVAR]], i32 12787; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr @__msan_retval_tls, align 82788; CHECK-NEXT:    ret <2 x double> [[TMPVAR2]]2789;2790entry:2791; Make sure we are using the operands defined by the ABI2792  %tmpvar = load double, ptr %x, align 42793  %tmpvar1 = insertelement <2 x double> poison, double %tmpvar, i32 02794  %tmpvar2 = insertelement <2 x double> %tmpvar1, double %tmpvar, i32 12795  ret <2 x double> %tmpvar22796}2797 2798define <1 x double> @ld1r_1d_double(ptr nocapture %x) #0 {2799; CHECK-LABEL: define <1 x double> @ld1r_1d_double(2800; CHECK-SAME: ptr captures(none) [[X:%.*]]) #[[ATTR1]] {2801; CHECK-NEXT:  entry:2802; CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 82803; CHECK-NEXT:    call void @llvm.donothing()2804; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP0]], 02805; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP1:%.*]], label [[TMP2:%.*]], !prof [[PROF1]]2806; CHECK:       1:2807; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2808; CHECK-NEXT:    unreachable2809; CHECK:       2:2810; CHECK-NEXT:    [[TMPVAR:%.*]] = load double, ptr [[X]], align 42811; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[X]] to i642812; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 1935140464885762813; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr2814; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP5]], align 42815; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <1 x i64> splat (i64 -1), i64 [[_MSLD]], i32 02816; CHECK-NEXT:    [[TMPVAR1:%.*]] = insertelement <1 x double> poison, double [[TMPVAR]], i32 02817; CHECK-NEXT:    store <1 x i64> [[_MSPROP]], ptr @__msan_retval_tls, align 82818; CHECK-NEXT:    ret <1 x double> [[TMPVAR1]]2819;2820entry:2821; Make sure we are using the operands defined by the ABI2822  %tmpvar = load double, ptr %x, align 42823  %tmpvar1 = insertelement <1 x double> poison, double %tmpvar, i32 02824  ret <1 x double> %tmpvar12825}2826 2827define <4 x float> @ld1r_4s_float_shuff(ptr nocapture %x) #0 {2828; CHECK-LABEL: define <4 x float> @ld1r_4s_float_shuff(2829; CHECK-SAME: ptr captures(none) [[X:%.*]]) #[[ATTR1]] {2830; CHECK-NEXT:  entry:2831; CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 82832; CHECK-NEXT:    call void @llvm.donothing()2833; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP0]], 02834; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP1:%.*]], label [[TMP2:%.*]], !prof [[PROF1]]2835; CHECK:       1:2836; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2837; CHECK-NEXT:    unreachable2838; CHECK:       2:2839; CHECK-NEXT:    [[TMPVAR:%.*]] = load float, ptr [[X]], align 42840; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[X]] to i642841; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 1935140464885762842; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr2843; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP5]], align 42844; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <4 x i32> splat (i32 -1), i32 [[_MSLD]], i32 02845; CHECK-NEXT:    [[TMPVAR1:%.*]] = insertelement <4 x float> poison, float [[TMPVAR]], i32 02846; CHECK-NEXT:    [[_MSPROP1:%.*]] = shufflevector <4 x i32> [[_MSPROP]], <4 x i32> splat (i32 -1), <4 x i32> zeroinitializer2847; CHECK-NEXT:    [[LANE:%.*]] = shufflevector <4 x float> [[TMPVAR1]], <4 x float> poison, <4 x i32> zeroinitializer2848; CHECK-NEXT:    store <4 x i32> [[_MSPROP1]], ptr @__msan_retval_tls, align 82849; CHECK-NEXT:    ret <4 x float> [[LANE]]2850;2851entry:2852; Make sure we are using the operands defined by the ABI2853  %tmpvar = load float, ptr %x, align 42854  %tmpvar1 = insertelement <4 x float> poison, float %tmpvar, i32 02855  %lane = shufflevector <4 x float> %tmpvar1, <4 x float> poison, <4 x i32> zeroinitializer2856  ret <4 x float> %lane2857}2858 2859define <2 x float> @ld1r_2s_float_shuff(ptr nocapture %x) #0 {2860; CHECK-LABEL: define <2 x float> @ld1r_2s_float_shuff(2861; CHECK-SAME: ptr captures(none) [[X:%.*]]) #[[ATTR1]] {2862; CHECK-NEXT:  entry:2863; CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 82864; CHECK-NEXT:    call void @llvm.donothing()2865; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP0]], 02866; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP1:%.*]], label [[TMP2:%.*]], !prof [[PROF1]]2867; CHECK:       1:2868; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2869; CHECK-NEXT:    unreachable2870; CHECK:       2:2871; CHECK-NEXT:    [[TMPVAR:%.*]] = load float, ptr [[X]], align 42872; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[X]] to i642873; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 1935140464885762874; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr2875; CHECK-NEXT:    [[_MSLD:%.*]] = load i32, ptr [[TMP5]], align 42876; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <2 x i32> splat (i32 -1), i32 [[_MSLD]], i32 02877; CHECK-NEXT:    [[TMPVAR1:%.*]] = insertelement <2 x float> poison, float [[TMPVAR]], i32 02878; CHECK-NEXT:    [[_MSPROP1:%.*]] = shufflevector <2 x i32> [[_MSPROP]], <2 x i32> splat (i32 -1), <2 x i32> zeroinitializer2879; CHECK-NEXT:    [[LANE:%.*]] = shufflevector <2 x float> [[TMPVAR1]], <2 x float> poison, <2 x i32> zeroinitializer2880; CHECK-NEXT:    store <2 x i32> [[_MSPROP1]], ptr @__msan_retval_tls, align 82881; CHECK-NEXT:    ret <2 x float> [[LANE]]2882;2883entry:2884; Make sure we are using the operands defined by the ABI2885  %tmpvar = load float, ptr %x, align 42886  %tmpvar1 = insertelement <2 x float> poison, float %tmpvar, i32 02887  %lane = shufflevector <2 x float> %tmpvar1, <2 x float> poison, <2 x i32> zeroinitializer2888  ret <2 x float> %lane2889}2890 2891define <2 x double> @ld1r_2d_double_shuff(ptr nocapture %x) #0 {2892; CHECK-LABEL: define <2 x double> @ld1r_2d_double_shuff(2893; CHECK-SAME: ptr captures(none) [[X:%.*]]) #[[ATTR1]] {2894; CHECK-NEXT:  entry:2895; CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 82896; CHECK-NEXT:    call void @llvm.donothing()2897; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP0]], 02898; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP1:%.*]], label [[TMP2:%.*]], !prof [[PROF1]]2899; CHECK:       1:2900; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2901; CHECK-NEXT:    unreachable2902; CHECK:       2:2903; CHECK-NEXT:    [[TMPVAR:%.*]] = load double, ptr [[X]], align 42904; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[X]] to i642905; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 1935140464885762906; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr2907; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP5]], align 42908; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <2 x i64> splat (i64 -1), i64 [[_MSLD]], i32 02909; CHECK-NEXT:    [[TMPVAR1:%.*]] = insertelement <2 x double> poison, double [[TMPVAR]], i32 02910; CHECK-NEXT:    [[_MSPROP1:%.*]] = shufflevector <2 x i64> [[_MSPROP]], <2 x i64> splat (i64 -1), <2 x i32> zeroinitializer2911; CHECK-NEXT:    [[LANE:%.*]] = shufflevector <2 x double> [[TMPVAR1]], <2 x double> poison, <2 x i32> zeroinitializer2912; CHECK-NEXT:    store <2 x i64> [[_MSPROP1]], ptr @__msan_retval_tls, align 82913; CHECK-NEXT:    ret <2 x double> [[LANE]]2914;2915entry:2916; Make sure we are using the operands defined by the ABI2917  %tmpvar = load double, ptr %x, align 42918  %tmpvar1 = insertelement <2 x double> poison, double %tmpvar, i32 02919  %lane = shufflevector <2 x double> %tmpvar1, <2 x double> poison, <2 x i32> zeroinitializer2920  ret <2 x double> %lane2921}2922 2923define <1 x double> @ld1r_1d_double_shuff(ptr nocapture %x) #0 {2924; CHECK-LABEL: define <1 x double> @ld1r_1d_double_shuff(2925; CHECK-SAME: ptr captures(none) [[X:%.*]]) #[[ATTR1]] {2926; CHECK-NEXT:  entry:2927; CHECK-NEXT:    [[TMP0:%.*]] = load i64, ptr @__msan_param_tls, align 82928; CHECK-NEXT:    call void @llvm.donothing()2929; CHECK-NEXT:    [[_MSCMP:%.*]] = icmp ne i64 [[TMP0]], 02930; CHECK-NEXT:    br i1 [[_MSCMP]], label [[TMP1:%.*]], label [[TMP2:%.*]], !prof [[PROF1]]2931; CHECK:       1:2932; CHECK-NEXT:    call void @__msan_warning_noreturn() #[[ATTR7]]2933; CHECK-NEXT:    unreachable2934; CHECK:       2:2935; CHECK-NEXT:    [[TMPVAR:%.*]] = load double, ptr [[X]], align 42936; CHECK-NEXT:    [[TMP3:%.*]] = ptrtoint ptr [[X]] to i642937; CHECK-NEXT:    [[TMP4:%.*]] = xor i64 [[TMP3]], 1935140464885762938; CHECK-NEXT:    [[TMP5:%.*]] = inttoptr i64 [[TMP4]] to ptr2939; CHECK-NEXT:    [[_MSLD:%.*]] = load i64, ptr [[TMP5]], align 42940; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <1 x i64> splat (i64 -1), i64 [[_MSLD]], i32 02941; CHECK-NEXT:    [[TMPVAR1:%.*]] = insertelement <1 x double> poison, double [[TMPVAR]], i32 02942; CHECK-NEXT:    [[_MSPROP1:%.*]] = shufflevector <1 x i64> [[_MSPROP]], <1 x i64> splat (i64 -1), <1 x i32> zeroinitializer2943; CHECK-NEXT:    [[LANE:%.*]] = shufflevector <1 x double> [[TMPVAR1]], <1 x double> poison, <1 x i32> zeroinitializer2944; CHECK-NEXT:    store <1 x i64> [[_MSPROP1]], ptr @__msan_retval_tls, align 82945; CHECK-NEXT:    ret <1 x double> [[LANE]]2946;2947entry:2948; Make sure we are using the operands defined by the ABI2949  %tmpvar = load double, ptr %x, align 42950  %tmpvar1 = insertelement <1 x double> poison, double %tmpvar, i32 02951  %lane = shufflevector <1 x double> %tmpvar1, <1 x double> poison, <1 x i32> zeroinitializer2952  ret <1 x double> %lane2953}2954 2955%struct.__neon_float32x2x2_t = type { <2 x float>,  <2 x float> }2956%struct.__neon_float32x2x3_t = type { <2 x float>,  <2 x float>,  <2 x float> }2957%struct.__neon_float32x2x4_t = type { <2 x float>,  <2 x float>, <2 x float>,  <2 x float> }2958 2959declare %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr) nounwind readonly2960declare %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr) nounwind readonly2961declare %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr) nounwind readonly2962declare %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld1x2.v2f32.p0(ptr) nounwind readonly2963declare %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr) nounwind readonly2964declare %struct.__neon_float64x1x2_t @llvm.aarch64.neon.ld1x2.v1f64.p0(ptr) nounwind readonly2965 2966define %struct.__neon_int8x8x2_t @ld1_x2_v8i8(ptr %addr) #0 {2967; CHECK-LABEL: define %struct.__neon_int8x8x2_t @ld1_x2_v8i8(2968; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {2969; CHECK-NEXT:    call void @llvm.donothing()2970; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i642971; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762972; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2973; CHECK-NEXT:    [[TMP9:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr [[TMP3]])2974; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr [[ADDR]])2975; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP9]], 02976; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP4]], 02977; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <8 x i8>, <8 x i8> } { <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1) }, <8 x i8> [[TMP11]], 02978; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X2_T:%.*]] poison, <8 x i8> [[TMP5]], 02979; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP9]], 12980; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i8>, <8 x i8> } [[TMP4]], 12981; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i8>, <8 x i8> } [[TMP13]], <8 x i8> [[TMP10]], 12982; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X2_T]] [[TMP6]], <8 x i8> [[TMP7]], 12983; CHECK-NEXT:    store { <8 x i8>, <8 x i8> } [[TMP12]], ptr @__msan_retval_tls, align 82984; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X8X2_T]] [[TMP8]]2985;2986  %val = call %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr %addr)2987  ret %struct.__neon_int8x8x2_t %val2988}2989 2990define %struct.__neon_int16x4x2_t @ld1_x2_v4i16(ptr %addr) #0 {2991; CHECK-LABEL: define %struct.__neon_int16x4x2_t @ld1_x2_v4i16(2992; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {2993; CHECK-NEXT:    call void @llvm.donothing()2994; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i642995; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885762996; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr2997; CHECK-NEXT:    [[TMP9:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr [[TMP3]])2998; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr [[ADDR]])2999; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP9]], 03000; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP4]], 03001; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <4 x i16>, <4 x i16> } { <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1) }, <4 x i16> [[TMP11]], 03002; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X2_T:%.*]] poison, <4 x i16> [[TMP5]], 03003; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP9]], 13004; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i16>, <4 x i16> } [[TMP4]], 13005; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i16>, <4 x i16> } [[TMP13]], <4 x i16> [[TMP10]], 13006; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X2_T]] [[TMP6]], <4 x i16> [[TMP7]], 13007; CHECK-NEXT:    store { <4 x i16>, <4 x i16> } [[TMP12]], ptr @__msan_retval_tls, align 83008; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X4X2_T]] [[TMP8]]3009;3010  %val = call %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr %addr)3011  ret %struct.__neon_int16x4x2_t %val3012}3013 3014define %struct.__neon_int32x2x2_t @ld1_x2_v2i32(ptr %addr) #0 {3015; CHECK-LABEL: define %struct.__neon_int32x2x2_t @ld1_x2_v2i32(3016; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3017; CHECK-NEXT:    call void @llvm.donothing()3018; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643019; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763020; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3021; CHECK-NEXT:    [[TMP9:%.*]] = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr [[TMP3]])3022; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr [[ADDR]])3023; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP9]], 03024; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP4]], 03025; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP11]], 03026; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X2_T:%.*]] poison, <2 x i32> [[TMP5]], 03027; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP9]], 13028; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP4]], 13029; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i32>, <2 x i32> } [[TMP13]], <2 x i32> [[TMP10]], 13030; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X2_T]] [[TMP6]], <2 x i32> [[TMP7]], 13031; CHECK-NEXT:    store { <2 x i32>, <2 x i32> } [[TMP12]], ptr @__msan_retval_tls, align 83032; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X2X2_T]] [[TMP8]]3033;3034  %val = call %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr %addr)3035  ret %struct.__neon_int32x2x2_t %val3036}3037 3038define %struct.__neon_float32x2x2_t @ld1_x2_v2f32(ptr %addr) #0 {3039; CHECK-LABEL: define %struct.__neon_float32x2x2_t @ld1_x2_v2f32(3040; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3041; CHECK-NEXT:    call void @llvm.donothing()3042; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643043; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763044; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3045; CHECK-NEXT:    [[TMP9:%.*]] = call { <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr [[TMP3]])3046; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x2.v2f32.p0(ptr [[ADDR]])3047; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP9]], 03048; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x float>, <2 x float> } [[TMP4]], 03049; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP11]], 03050; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X2X2_T:%.*]] poison, <2 x float> [[TMP5]], 03051; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <2 x i32>, <2 x i32> } [[TMP9]], 13052; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x float>, <2 x float> } [[TMP4]], 13053; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i32>, <2 x i32> } [[TMP13]], <2 x i32> [[TMP10]], 13054; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X2X2_T]] [[TMP6]], <2 x float> [[TMP7]], 13055; CHECK-NEXT:    store { <2 x i32>, <2 x i32> } [[TMP12]], ptr @__msan_retval_tls, align 83056; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT32X2X2_T]] [[TMP8]]3057;3058  %val = call %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld1x2.v2f32.p0(ptr %addr)3059  ret %struct.__neon_float32x2x2_t %val3060}3061 3062define %struct.__neon_int64x1x2_t @ld1_x2_v1i64(ptr %addr) #0 {3063; CHECK-LABEL: define %struct.__neon_int64x1x2_t @ld1_x2_v1i64(3064; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3065; CHECK-NEXT:    call void @llvm.donothing()3066; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643067; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763068; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3069; CHECK-NEXT:    [[TMP9:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr [[TMP3]])3070; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr [[ADDR]])3071; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP9]], 03072; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP4]], 03073; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP11]], 03074; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X2_T:%.*]] poison, <1 x i64> [[TMP5]], 03075; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP9]], 13076; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP4]], 13077; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <1 x i64>, <1 x i64> } [[TMP13]], <1 x i64> [[TMP10]], 13078; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X2_T]] [[TMP6]], <1 x i64> [[TMP7]], 13079; CHECK-NEXT:    store { <1 x i64>, <1 x i64> } [[TMP12]], ptr @__msan_retval_tls, align 83080; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X1X2_T]] [[TMP8]]3081;3082  %val = call %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr %addr)3083  ret %struct.__neon_int64x1x2_t %val3084}3085 3086define %struct.__neon_float64x1x2_t @ld1_x2_v1f64(ptr %addr) #0 {3087; CHECK-LABEL: define %struct.__neon_float64x1x2_t @ld1_x2_v1f64(3088; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3089; CHECK-NEXT:    call void @llvm.donothing()3090; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643091; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763092; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3093; CHECK-NEXT:    [[TMP9:%.*]] = call { <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr [[TMP3]])3094; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x2.v1f64.p0(ptr [[ADDR]])3095; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP9]], 03096; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x double>, <1 x double> } [[TMP4]], 03097; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP11]], 03098; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X2_T:%.*]] poison, <1 x double> [[TMP5]], 03099; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <1 x i64>, <1 x i64> } [[TMP9]], 13100; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x double>, <1 x double> } [[TMP4]], 13101; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <1 x i64>, <1 x i64> } [[TMP13]], <1 x i64> [[TMP10]], 13102; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X2_T]] [[TMP6]], <1 x double> [[TMP7]], 13103; CHECK-NEXT:    store { <1 x i64>, <1 x i64> } [[TMP12]], ptr @__msan_retval_tls, align 83104; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT64X1X2_T]] [[TMP8]]3105;3106  %val = call %struct.__neon_float64x1x2_t @llvm.aarch64.neon.ld1x2.v1f64.p0(ptr %addr)3107  ret %struct.__neon_float64x1x2_t %val3108}3109 3110 3111%struct.__neon_float32x4x2_t = type { <4 x float>,  <4 x float> }3112%struct.__neon_float32x4x3_t = type { <4 x float>,  <4 x float>,  <4 x float> }3113%struct.__neon_float32x4x4_t = type { <4 x float>,  <4 x float>, <4 x float>,  <4 x float> }3114 3115%struct.__neon_float64x2x2_t = type { <2 x double>,  <2 x double> }3116%struct.__neon_float64x2x3_t = type { <2 x double>,  <2 x double>,  <2 x double> }3117%struct.__neon_float64x2x4_t = type { <2 x double>,  <2 x double>, <2 x double>,  <2 x double> }3118 3119declare %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr) nounwind readonly3120declare %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr) nounwind readonly3121declare %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr) nounwind readonly3122declare %struct.__neon_float32x4x2_t @llvm.aarch64.neon.ld1x2.v4f32.p0(ptr) nounwind readonly3123declare %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr) nounwind readonly3124declare %struct.__neon_float64x2x2_t @llvm.aarch64.neon.ld1x2.v2f64.p0(ptr) nounwind readonly3125 3126define %struct.__neon_int8x16x2_t @ld1_x2_v16i8(ptr %addr) #0 {3127; CHECK-LABEL: define %struct.__neon_int8x16x2_t @ld1_x2_v16i8(3128; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3129; CHECK-NEXT:    call void @llvm.donothing()3130; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643131; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763132; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3133; CHECK-NEXT:    [[TMP9:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr [[TMP3]])3134; CHECK-NEXT:    [[TMP4:%.*]] = call { <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr [[ADDR]])3135; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP9]], 03136; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP4]], 03137; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP11]], 03138; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X2_T:%.*]] poison, <16 x i8> [[TMP5]], 03139; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP9]], 13140; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <16 x i8>, <16 x i8> } [[TMP4]], 13141; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <16 x i8>, <16 x i8> } [[TMP13]], <16 x i8> [[TMP10]], 13142; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X2_T]] [[TMP6]], <16 x i8> [[TMP7]], 13143; CHECK-NEXT:    store { <16 x i8>, <16 x i8> } [[TMP12]], ptr @__msan_retval_tls, align 83144; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X2_T]] [[TMP8]]3145;3146  %val = call %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr %addr)3147  ret %struct.__neon_int8x16x2_t %val3148}3149 3150define %struct.__neon_int16x8x2_t @ld1_x2_v8i16(ptr %addr) #0 {3151; CHECK-LABEL: define %struct.__neon_int16x8x2_t @ld1_x2_v8i16(3152; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3153; CHECK-NEXT:    call void @llvm.donothing()3154; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643155; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763156; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3157; CHECK-NEXT:    [[TMP9:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr [[TMP3]])3158; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr [[ADDR]])3159; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP9]], 03160; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP4]], 03161; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP11]], 03162; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X2_T:%.*]] poison, <8 x i16> [[TMP5]], 03163; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP9]], 13164; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i16>, <8 x i16> } [[TMP4]], 13165; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i16>, <8 x i16> } [[TMP13]], <8 x i16> [[TMP10]], 13166; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X2_T]] [[TMP6]], <8 x i16> [[TMP7]], 13167; CHECK-NEXT:    store { <8 x i16>, <8 x i16> } [[TMP12]], ptr @__msan_retval_tls, align 83168; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X2_T]] [[TMP8]]3169;3170  %val = call %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr %addr)3171  ret %struct.__neon_int16x8x2_t %val3172}3173 3174define %struct.__neon_int32x4x2_t @ld1_x2_v4i32(ptr %addr) #0 {3175; CHECK-LABEL: define %struct.__neon_int32x4x2_t @ld1_x2_v4i32(3176; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3177; CHECK-NEXT:    call void @llvm.donothing()3178; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643179; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763180; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3181; CHECK-NEXT:    [[TMP9:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr [[TMP3]])3182; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr [[ADDR]])3183; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP9]], 03184; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP4]], 03185; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP11]], 03186; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X2_T:%.*]] poison, <4 x i32> [[TMP5]], 03187; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP9]], 13188; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP4]], 13189; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i32>, <4 x i32> } [[TMP13]], <4 x i32> [[TMP10]], 13190; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X2_T]] [[TMP6]], <4 x i32> [[TMP7]], 13191; CHECK-NEXT:    store { <4 x i32>, <4 x i32> } [[TMP12]], ptr @__msan_retval_tls, align 83192; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X2_T]] [[TMP8]]3193;3194  %val = call %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr %addr)3195  ret %struct.__neon_int32x4x2_t %val3196}3197 3198define %struct.__neon_float32x4x2_t @ld1_x2_v4f32(ptr %addr) #0 {3199; CHECK-LABEL: define %struct.__neon_float32x4x2_t @ld1_x2_v4f32(3200; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3201; CHECK-NEXT:    call void @llvm.donothing()3202; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643203; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763204; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3205; CHECK-NEXT:    [[TMP9:%.*]] = call { <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr [[TMP3]])3206; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x2.v4f32.p0(ptr [[ADDR]])3207; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP9]], 03208; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x float>, <4 x float> } [[TMP4]], 03209; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP11]], 03210; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X4X2_T:%.*]] poison, <4 x float> [[TMP5]], 03211; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <4 x i32>, <4 x i32> } [[TMP9]], 13212; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x float>, <4 x float> } [[TMP4]], 13213; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i32>, <4 x i32> } [[TMP13]], <4 x i32> [[TMP10]], 13214; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X4X2_T]] [[TMP6]], <4 x float> [[TMP7]], 13215; CHECK-NEXT:    store { <4 x i32>, <4 x i32> } [[TMP12]], ptr @__msan_retval_tls, align 83216; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT32X4X2_T]] [[TMP8]]3217;3218  %val = call %struct.__neon_float32x4x2_t @llvm.aarch64.neon.ld1x2.v4f32.p0(ptr %addr)3219  ret %struct.__neon_float32x4x2_t %val3220}3221 3222define %struct.__neon_int64x2x2_t @ld1_x2_v2i64(ptr %addr) #0 {3223; CHECK-LABEL: define %struct.__neon_int64x2x2_t @ld1_x2_v2i64(3224; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3225; CHECK-NEXT:    call void @llvm.donothing()3226; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643227; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763228; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3229; CHECK-NEXT:    [[TMP9:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr [[TMP3]])3230; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr [[ADDR]])3231; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP9]], 03232; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP4]], 03233; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP11]], 03234; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X2_T:%.*]] poison, <2 x i64> [[TMP5]], 03235; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP9]], 13236; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP4]], 13237; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i64>, <2 x i64> } [[TMP13]], <2 x i64> [[TMP10]], 13238; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X2_T]] [[TMP6]], <2 x i64> [[TMP7]], 13239; CHECK-NEXT:    store { <2 x i64>, <2 x i64> } [[TMP12]], ptr @__msan_retval_tls, align 83240; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X2_T]] [[TMP8]]3241;3242  %val = call %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr %addr)3243  ret %struct.__neon_int64x2x2_t %val3244}3245 3246define %struct.__neon_float64x2x2_t @ld1_x2_v2f64(ptr %addr) #0 {3247; CHECK-LABEL: define %struct.__neon_float64x2x2_t @ld1_x2_v2f64(3248; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3249; CHECK-NEXT:    call void @llvm.donothing()3250; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643251; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763252; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3253; CHECK-NEXT:    [[TMP9:%.*]] = call { <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr [[TMP3]])3254; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x2.v2f64.p0(ptr [[ADDR]])3255; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP9]], 03256; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x double>, <2 x double> } [[TMP4]], 03257; CHECK-NEXT:    [[TMP13:%.*]] = insertvalue { <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP11]], 03258; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X2X2_T:%.*]] poison, <2 x double> [[TMP5]], 03259; CHECK-NEXT:    [[TMP10:%.*]] = extractvalue { <2 x i64>, <2 x i64> } [[TMP9]], 13260; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x double>, <2 x double> } [[TMP4]], 13261; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i64>, <2 x i64> } [[TMP13]], <2 x i64> [[TMP10]], 13262; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X2X2_T]] [[TMP6]], <2 x double> [[TMP7]], 13263; CHECK-NEXT:    store { <2 x i64>, <2 x i64> } [[TMP12]], ptr @__msan_retval_tls, align 83264; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT64X2X2_T]] [[TMP8]]3265;3266  %val = call %struct.__neon_float64x2x2_t @llvm.aarch64.neon.ld1x2.v2f64.p0(ptr %addr)3267  ret %struct.__neon_float64x2x2_t %val3268}3269 3270declare %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr) nounwind readonly3271declare %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr) nounwind readonly3272declare %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr) nounwind readonly3273declare %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld1x3.v2f32.p0(ptr) nounwind readonly3274declare %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr) nounwind readonly3275declare %struct.__neon_float64x1x3_t @llvm.aarch64.neon.ld1x3.v1f64.p0(ptr) nounwind readonly3276 3277define %struct.__neon_int8x8x3_t @ld1_x3_v8i8(ptr %addr) #0 {3278; CHECK-LABEL: define %struct.__neon_int8x8x3_t @ld1_x3_v8i8(3279; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3280; CHECK-NEXT:    call void @llvm.donothing()3281; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643282; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763283; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3284; CHECK-NEXT:    [[TMP11:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr [[TMP3]])3285; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr [[ADDR]])3286; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP11]], 03287; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 03288; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8> } { <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1) }, <8 x i8> [[TMP13]], 03289; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X3_T:%.*]] poison, <8 x i8> [[TMP5]], 03290; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP11]], 13291; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 13292; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP15]], <8 x i8> [[TMP17]], 13293; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X3_T]] [[TMP6]], <8 x i8> [[TMP7]], 13294; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP11]], 23295; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 23296; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP12]], <8 x i8> [[TMP14]], 23297; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X3_T]] [[TMP8]], <8 x i8> [[TMP9]], 23298; CHECK-NEXT:    store { <8 x i8>, <8 x i8>, <8 x i8> } [[TMP16]], ptr @__msan_retval_tls, align 83299; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X8X3_T]] [[TMP10]]3300;3301  %val = call %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr %addr)3302  ret %struct.__neon_int8x8x3_t %val3303}3304 3305define %struct.__neon_int16x4x3_t @ld1_x3_v4i16(ptr %addr) #0 {3306; CHECK-LABEL: define %struct.__neon_int16x4x3_t @ld1_x3_v4i16(3307; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3308; CHECK-NEXT:    call void @llvm.donothing()3309; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643310; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763311; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3312; CHECK-NEXT:    [[TMP11:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr [[TMP3]])3313; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr [[ADDR]])3314; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP11]], 03315; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 03316; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16> } { <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1) }, <4 x i16> [[TMP13]], 03317; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X3_T:%.*]] poison, <4 x i16> [[TMP5]], 03318; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP11]], 13319; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 13320; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP15]], <4 x i16> [[TMP17]], 13321; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X3_T]] [[TMP6]], <4 x i16> [[TMP7]], 13322; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP11]], 23323; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 23324; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP12]], <4 x i16> [[TMP14]], 23325; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X3_T]] [[TMP8]], <4 x i16> [[TMP9]], 23326; CHECK-NEXT:    store { <4 x i16>, <4 x i16>, <4 x i16> } [[TMP16]], ptr @__msan_retval_tls, align 83327; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X4X3_T]] [[TMP10]]3328;3329  %val = call %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr %addr)3330  ret %struct.__neon_int16x4x3_t %val3331}3332 3333define %struct.__neon_int32x2x3_t @ld1_x3_v2i32(ptr %addr) #0 {3334; CHECK-LABEL: define %struct.__neon_int32x2x3_t @ld1_x3_v2i32(3335; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3336; CHECK-NEXT:    call void @llvm.donothing()3337; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643338; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763339; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3340; CHECK-NEXT:    [[TMP11:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr [[TMP3]])3341; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr [[ADDR]])3342; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 03343; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 03344; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP13]], 03345; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X3_T:%.*]] poison, <2 x i32> [[TMP5]], 03346; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 13347; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 13348; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP15]], <2 x i32> [[TMP17]], 13349; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X3_T]] [[TMP6]], <2 x i32> [[TMP7]], 13350; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 23351; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 23352; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP12]], <2 x i32> [[TMP14]], 23353; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X3_T]] [[TMP8]], <2 x i32> [[TMP9]], 23354; CHECK-NEXT:    store { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP16]], ptr @__msan_retval_tls, align 83355; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X2X3_T]] [[TMP10]]3356;3357  %val = call %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr %addr)3358  ret %struct.__neon_int32x2x3_t %val3359}3360 3361define %struct.__neon_float32x2x3_t @ld1_x3_v2f32(ptr %addr) #0 {3362; CHECK-LABEL: define %struct.__neon_float32x2x3_t @ld1_x3_v2f32(3363; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3364; CHECK-NEXT:    call void @llvm.donothing()3365; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643366; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763367; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3368; CHECK-NEXT:    [[TMP11:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr [[TMP3]])3369; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x3.v2f32.p0(ptr [[ADDR]])3370; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 03371; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x float>, <2 x float>, <2 x float> } [[TMP4]], 03372; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP13]], 03373; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X2X3_T:%.*]] poison, <2 x float> [[TMP5]], 03374; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 13375; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x float>, <2 x float>, <2 x float> } [[TMP4]], 13376; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP15]], <2 x i32> [[TMP17]], 13377; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X2X3_T]] [[TMP6]], <2 x float> [[TMP7]], 13378; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP11]], 23379; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x float>, <2 x float>, <2 x float> } [[TMP4]], 23380; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP12]], <2 x i32> [[TMP14]], 23381; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X2X3_T]] [[TMP8]], <2 x float> [[TMP9]], 23382; CHECK-NEXT:    store { <2 x i32>, <2 x i32>, <2 x i32> } [[TMP16]], ptr @__msan_retval_tls, align 83383; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT32X2X3_T]] [[TMP10]]3384;3385  %val = call %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld1x3.v2f32.p0(ptr %addr)3386  ret %struct.__neon_float32x2x3_t %val3387}3388 3389define %struct.__neon_int64x1x3_t @ld1_x3_v1i64(ptr %addr) #0 {3390; CHECK-LABEL: define %struct.__neon_int64x1x3_t @ld1_x3_v1i64(3391; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3392; CHECK-NEXT:    call void @llvm.donothing()3393; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643394; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763395; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3396; CHECK-NEXT:    [[TMP11:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr [[TMP3]])3397; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr [[ADDR]])3398; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 03399; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 03400; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP13]], 03401; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X3_T:%.*]] poison, <1 x i64> [[TMP5]], 03402; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 13403; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 13404; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP15]], <1 x i64> [[TMP17]], 13405; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X3_T]] [[TMP6]], <1 x i64> [[TMP7]], 13406; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 23407; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 23408; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP12]], <1 x i64> [[TMP14]], 23409; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X3_T]] [[TMP8]], <1 x i64> [[TMP9]], 23410; CHECK-NEXT:    store { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP16]], ptr @__msan_retval_tls, align 83411; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X1X3_T]] [[TMP10]]3412;3413  %val = call %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr %addr)3414  ret %struct.__neon_int64x1x3_t %val3415}3416 3417define %struct.__neon_float64x1x3_t @ld1_x3_v1f64(ptr %addr) #0 {3418; CHECK-LABEL: define %struct.__neon_float64x1x3_t @ld1_x3_v1f64(3419; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3420; CHECK-NEXT:    call void @llvm.donothing()3421; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643422; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763423; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3424; CHECK-NEXT:    [[TMP11:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr [[TMP3]])3425; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x3.v1f64.p0(ptr [[ADDR]])3426; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 03427; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 03428; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP13]], 03429; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X3_T:%.*]] poison, <1 x double> [[TMP5]], 03430; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 13431; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 13432; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP15]], <1 x i64> [[TMP17]], 13433; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X3_T]] [[TMP6]], <1 x double> [[TMP7]], 13434; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP11]], 23435; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 23436; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP12]], <1 x i64> [[TMP14]], 23437; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X3_T]] [[TMP8]], <1 x double> [[TMP9]], 23438; CHECK-NEXT:    store { <1 x i64>, <1 x i64>, <1 x i64> } [[TMP16]], ptr @__msan_retval_tls, align 83439; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT64X1X3_T]] [[TMP10]]3440;3441  %val = call %struct.__neon_float64x1x3_t @llvm.aarch64.neon.ld1x3.v1f64.p0(ptr %addr)3442  ret %struct.__neon_float64x1x3_t %val3443}3444 3445declare %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr) nounwind readonly3446declare %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr) nounwind readonly3447declare %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr) nounwind readonly3448declare %struct.__neon_float32x4x3_t @llvm.aarch64.neon.ld1x3.v4f32.p0(ptr) nounwind readonly3449declare %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr) nounwind readonly3450declare %struct.__neon_float64x2x3_t @llvm.aarch64.neon.ld1x3.v2f64.p0(ptr) nounwind readonly3451 3452define %struct.__neon_int8x16x3_t @ld1_x3_v16i8(ptr %addr) #0 {3453; CHECK-LABEL: define %struct.__neon_int8x16x3_t @ld1_x3_v16i8(3454; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3455; CHECK-NEXT:    call void @llvm.donothing()3456; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643457; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763458; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3459; CHECK-NEXT:    [[TMP11:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr [[TMP3]])3460; CHECK-NEXT:    [[TMP4:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr [[ADDR]])3461; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP11]], 03462; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 03463; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP13]], 03464; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T:%.*]] poison, <16 x i8> [[TMP5]], 03465; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP11]], 13466; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 13467; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP15]], <16 x i8> [[TMP17]], 13468; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T]] [[TMP6]], <16 x i8> [[TMP7]], 13469; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP11]], 23470; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 23471; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP12]], <16 x i8> [[TMP14]], 23472; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X3_T]] [[TMP8]], <16 x i8> [[TMP9]], 23473; CHECK-NEXT:    store { <16 x i8>, <16 x i8>, <16 x i8> } [[TMP16]], ptr @__msan_retval_tls, align 83474; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X3_T]] [[TMP10]]3475;3476  %val = call %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr %addr)3477  ret %struct.__neon_int8x16x3_t %val3478}3479 3480define %struct.__neon_int16x8x3_t @ld1_x3_v8i16(ptr %addr) #0 {3481; CHECK-LABEL: define %struct.__neon_int16x8x3_t @ld1_x3_v8i16(3482; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3483; CHECK-NEXT:    call void @llvm.donothing()3484; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643485; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763486; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3487; CHECK-NEXT:    [[TMP11:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr [[TMP3]])3488; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr [[ADDR]])3489; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP11]], 03490; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 03491; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP13]], 03492; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T:%.*]] poison, <8 x i16> [[TMP5]], 03493; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP11]], 13494; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 13495; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP15]], <8 x i16> [[TMP17]], 13496; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T]] [[TMP6]], <8 x i16> [[TMP7]], 13497; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP11]], 23498; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 23499; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP12]], <8 x i16> [[TMP14]], 23500; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X3_T]] [[TMP8]], <8 x i16> [[TMP9]], 23501; CHECK-NEXT:    store { <8 x i16>, <8 x i16>, <8 x i16> } [[TMP16]], ptr @__msan_retval_tls, align 83502; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X3_T]] [[TMP10]]3503;3504  %val = call %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr %addr)3505  ret %struct.__neon_int16x8x3_t %val3506}3507 3508define %struct.__neon_int32x4x3_t @ld1_x3_v4i32(ptr %addr) #0 {3509; CHECK-LABEL: define %struct.__neon_int32x4x3_t @ld1_x3_v4i32(3510; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3511; CHECK-NEXT:    call void @llvm.donothing()3512; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643513; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763514; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3515; CHECK-NEXT:    [[TMP11:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr [[TMP3]])3516; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr [[ADDR]])3517; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 03518; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 03519; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP13]], 03520; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T:%.*]] poison, <4 x i32> [[TMP5]], 03521; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 13522; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 13523; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP15]], <4 x i32> [[TMP17]], 13524; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T]] [[TMP6]], <4 x i32> [[TMP7]], 13525; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 23526; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 23527; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP12]], <4 x i32> [[TMP14]], 23528; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X3_T]] [[TMP8]], <4 x i32> [[TMP9]], 23529; CHECK-NEXT:    store { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP16]], ptr @__msan_retval_tls, align 83530; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X3_T]] [[TMP10]]3531;3532  %val = call %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr %addr)3533  ret %struct.__neon_int32x4x3_t %val3534}3535 3536define %struct.__neon_float32x4x3_t @ld1_x3_v4f32(ptr %addr) #0 {3537; CHECK-LABEL: define %struct.__neon_float32x4x3_t @ld1_x3_v4f32(3538; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3539; CHECK-NEXT:    call void @llvm.donothing()3540; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643541; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763542; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3543; CHECK-NEXT:    [[TMP11:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr [[TMP3]])3544; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x3.v4f32.p0(ptr [[ADDR]])3545; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 03546; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x float>, <4 x float>, <4 x float> } [[TMP4]], 03547; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP13]], 03548; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X4X3_T:%.*]] poison, <4 x float> [[TMP5]], 03549; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 13550; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x float>, <4 x float>, <4 x float> } [[TMP4]], 13551; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP15]], <4 x i32> [[TMP17]], 13552; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X4X3_T]] [[TMP6]], <4 x float> [[TMP7]], 13553; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP11]], 23554; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x float>, <4 x float>, <4 x float> } [[TMP4]], 23555; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP12]], <4 x i32> [[TMP14]], 23556; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X4X3_T]] [[TMP8]], <4 x float> [[TMP9]], 23557; CHECK-NEXT:    store { <4 x i32>, <4 x i32>, <4 x i32> } [[TMP16]], ptr @__msan_retval_tls, align 83558; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT32X4X3_T]] [[TMP10]]3559;3560  %val = call %struct.__neon_float32x4x3_t @llvm.aarch64.neon.ld1x3.v4f32.p0(ptr %addr)3561  ret %struct.__neon_float32x4x3_t %val3562}3563 3564define %struct.__neon_int64x2x3_t @ld1_x3_v2i64(ptr %addr) #0 {3565; CHECK-LABEL: define %struct.__neon_int64x2x3_t @ld1_x3_v2i64(3566; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3567; CHECK-NEXT:    call void @llvm.donothing()3568; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643569; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763570; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3571; CHECK-NEXT:    [[TMP11:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr [[TMP3]])3572; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr [[ADDR]])3573; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 03574; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 03575; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP13]], 03576; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T:%.*]] poison, <2 x i64> [[TMP5]], 03577; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 13578; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 13579; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP15]], <2 x i64> [[TMP17]], 13580; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T]] [[TMP6]], <2 x i64> [[TMP7]], 13581; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 23582; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 23583; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP12]], <2 x i64> [[TMP14]], 23584; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X3_T]] [[TMP8]], <2 x i64> [[TMP9]], 23585; CHECK-NEXT:    store { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP16]], ptr @__msan_retval_tls, align 83586; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X3_T]] [[TMP10]]3587;3588  %val = call %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr %addr)3589  ret %struct.__neon_int64x2x3_t %val3590}3591 3592define %struct.__neon_float64x2x3_t @ld1_x3_v2f64(ptr %addr) #0 {3593; CHECK-LABEL: define %struct.__neon_float64x2x3_t @ld1_x3_v2f64(3594; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3595; CHECK-NEXT:    call void @llvm.donothing()3596; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643597; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763598; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3599; CHECK-NEXT:    [[TMP11:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr [[TMP3]])3600; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x3.v2f64.p0(ptr [[ADDR]])3601; CHECK-NEXT:    [[TMP13:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 03602; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x double>, <2 x double>, <2 x double> } [[TMP4]], 03603; CHECK-NEXT:    [[TMP15:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP13]], 03604; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X2X3_T:%.*]] poison, <2 x double> [[TMP5]], 03605; CHECK-NEXT:    [[TMP17:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 13606; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x double>, <2 x double>, <2 x double> } [[TMP4]], 13607; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP15]], <2 x i64> [[TMP17]], 13608; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X2X3_T]] [[TMP6]], <2 x double> [[TMP7]], 13609; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP11]], 23610; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x double>, <2 x double>, <2 x double> } [[TMP4]], 23611; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP12]], <2 x i64> [[TMP14]], 23612; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X2X3_T]] [[TMP8]], <2 x double> [[TMP9]], 23613; CHECK-NEXT:    store { <2 x i64>, <2 x i64>, <2 x i64> } [[TMP16]], ptr @__msan_retval_tls, align 83614; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT64X2X3_T]] [[TMP10]]3615;3616  %val = call %struct.__neon_float64x2x3_t @llvm.aarch64.neon.ld1x3.v2f64.p0(ptr %addr)3617  ret %struct.__neon_float64x2x3_t %val3618}3619 3620declare %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr) nounwind readonly3621declare %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr) nounwind readonly3622declare %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr) nounwind readonly3623declare %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld1x4.v2f32.p0(ptr) nounwind readonly3624declare %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr) nounwind readonly3625declare %struct.__neon_float64x1x4_t @llvm.aarch64.neon.ld1x4.v1f64.p0(ptr) nounwind readonly3626 3627define %struct.__neon_int8x8x4_t @ld1_x4_v8i8(ptr %addr) #0 {3628; CHECK-LABEL: define %struct.__neon_int8x8x4_t @ld1_x4_v8i8(3629; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3630; CHECK-NEXT:    call void @llvm.donothing()3631; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643632; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763633; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3634; CHECK-NEXT:    [[TMP13:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr [[TMP3]])3635; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr [[ADDR]])3636; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 03637; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 03638; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } { <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1), <8 x i8> splat (i8 -1) }, <8 x i8> [[TMP15]], 03639; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T:%.*]] poison, <8 x i8> [[TMP5]], 03640; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 13641; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 13642; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP17]], <8 x i8> [[TMP19]], 13643; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T]] [[TMP6]], <8 x i8> [[TMP7]], 13644; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 23645; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 23646; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP21]], <8 x i8> [[TMP14]], 23647; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T]] [[TMP8]], <8 x i8> [[TMP9]], 23648; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP13]], 33649; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP4]], 33650; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP16]], <8 x i8> [[TMP18]], 33651; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT8X8X4_T]] [[TMP10]], <8 x i8> [[TMP11]], 33652; CHECK-NEXT:    store { <8 x i8>, <8 x i8>, <8 x i8>, <8 x i8> } [[TMP20]], ptr @__msan_retval_tls, align 83653; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X8X4_T]] [[TMP12]]3654;3655  %val = call %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr %addr)3656  ret %struct.__neon_int8x8x4_t %val3657}3658 3659define %struct.__neon_int16x4x4_t @ld1_x4_v4i16(ptr %addr) #0 {3660; CHECK-LABEL: define %struct.__neon_int16x4x4_t @ld1_x4_v4i16(3661; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3662; CHECK-NEXT:    call void @llvm.donothing()3663; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643664; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763665; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3666; CHECK-NEXT:    [[TMP13:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr [[TMP3]])3667; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr [[ADDR]])3668; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 03669; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 03670; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } { <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1), <4 x i16> splat (i16 -1) }, <4 x i16> [[TMP15]], 03671; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T:%.*]] poison, <4 x i16> [[TMP5]], 03672; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 13673; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 13674; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP17]], <4 x i16> [[TMP19]], 13675; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T]] [[TMP6]], <4 x i16> [[TMP7]], 13676; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 23677; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 23678; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP21]], <4 x i16> [[TMP14]], 23679; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T]] [[TMP8]], <4 x i16> [[TMP9]], 23680; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP13]], 33681; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP4]], 33682; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP16]], <4 x i16> [[TMP18]], 33683; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT16X4X4_T]] [[TMP10]], <4 x i16> [[TMP11]], 33684; CHECK-NEXT:    store { <4 x i16>, <4 x i16>, <4 x i16>, <4 x i16> } [[TMP20]], ptr @__msan_retval_tls, align 83685; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X4X4_T]] [[TMP12]]3686;3687  %val = call %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr %addr)3688  ret %struct.__neon_int16x4x4_t %val3689}3690 3691define %struct.__neon_int32x2x4_t @ld1_x4_v2i32(ptr %addr) #0 {3692; CHECK-LABEL: define %struct.__neon_int32x2x4_t @ld1_x4_v2i32(3693; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3694; CHECK-NEXT:    call void @llvm.donothing()3695; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643696; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763697; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3698; CHECK-NEXT:    [[TMP13:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr [[TMP3]])3699; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr [[ADDR]])3700; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 03701; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 03702; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP15]], 03703; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T:%.*]] poison, <2 x i32> [[TMP5]], 03704; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 13705; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 13706; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP17]], <2 x i32> [[TMP19]], 13707; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T]] [[TMP6]], <2 x i32> [[TMP7]], 13708; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 23709; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 23710; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP21]], <2 x i32> [[TMP14]], 23711; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T]] [[TMP8]], <2 x i32> [[TMP9]], 23712; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 33713; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP4]], 33714; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP16]], <2 x i32> [[TMP18]], 33715; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT32X2X4_T]] [[TMP10]], <2 x i32> [[TMP11]], 33716; CHECK-NEXT:    store { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP20]], ptr @__msan_retval_tls, align 83717; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X2X4_T]] [[TMP12]]3718;3719  %val = call %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr %addr)3720  ret %struct.__neon_int32x2x4_t %val3721}3722 3723define %struct.__neon_float32x2x4_t @ld1_x4_v2f32(ptr %addr) #0 {3724; CHECK-LABEL: define %struct.__neon_float32x2x4_t @ld1_x4_v2f32(3725; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3726; CHECK-NEXT:    call void @llvm.donothing()3727; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643728; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763729; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3730; CHECK-NEXT:    [[TMP13:%.*]] = call { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr [[TMP3]])3731; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x float>, <2 x float>, <2 x float>, <2 x float> } @llvm.aarch64.neon.ld1x4.v2f32.p0(ptr [[ADDR]])3732; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 03733; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x float>, <2 x float>, <2 x float>, <2 x float> } [[TMP4]], 03734; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } { <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1), <2 x i32> splat (i32 -1) }, <2 x i32> [[TMP15]], 03735; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X2X4_T:%.*]] poison, <2 x float> [[TMP5]], 03736; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 13737; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x float>, <2 x float>, <2 x float>, <2 x float> } [[TMP4]], 13738; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP17]], <2 x i32> [[TMP19]], 13739; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X2X4_T]] [[TMP6]], <2 x float> [[TMP7]], 13740; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 23741; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x float>, <2 x float>, <2 x float>, <2 x float> } [[TMP4]], 23742; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP21]], <2 x i32> [[TMP14]], 23743; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X2X4_T]] [[TMP8]], <2 x float> [[TMP9]], 23744; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP13]], 33745; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x float>, <2 x float>, <2 x float>, <2 x float> } [[TMP4]], 33746; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP16]], <2 x i32> [[TMP18]], 33747; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X2X4_T]] [[TMP10]], <2 x float> [[TMP11]], 33748; CHECK-NEXT:    store { <2 x i32>, <2 x i32>, <2 x i32>, <2 x i32> } [[TMP20]], ptr @__msan_retval_tls, align 83749; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT32X2X4_T]] [[TMP12]]3750;3751  %val = call %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld1x4.v2f32.p0(ptr %addr)3752  ret %struct.__neon_float32x2x4_t %val3753}3754 3755define %struct.__neon_int64x1x4_t @ld1_x4_v1i64(ptr %addr) #0 {3756; CHECK-LABEL: define %struct.__neon_int64x1x4_t @ld1_x4_v1i64(3757; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3758; CHECK-NEXT:    call void @llvm.donothing()3759; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643760; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763761; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3762; CHECK-NEXT:    [[TMP13:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr [[TMP3]])3763; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr [[ADDR]])3764; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 03765; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 03766; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP15]], 03767; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T:%.*]] poison, <1 x i64> [[TMP5]], 03768; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 13769; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 13770; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP17]], <1 x i64> [[TMP19]], 13771; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T]] [[TMP6]], <1 x i64> [[TMP7]], 13772; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 23773; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 23774; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP21]], <1 x i64> [[TMP14]], 23775; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T]] [[TMP8]], <1 x i64> [[TMP9]], 23776; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 33777; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP4]], 33778; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP16]], <1 x i64> [[TMP18]], 33779; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT64X1X4_T]] [[TMP10]], <1 x i64> [[TMP11]], 33780; CHECK-NEXT:    store { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP20]], ptr @__msan_retval_tls, align 83781; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X1X4_T]] [[TMP12]]3782;3783  %val = call %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr %addr)3784  ret %struct.__neon_int64x1x4_t %val3785}3786 3787define %struct.__neon_float64x1x4_t @ld1_x4_v1f64(ptr %addr) #0 {3788; CHECK-LABEL: define %struct.__neon_float64x1x4_t @ld1_x4_v1f64(3789; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3790; CHECK-NEXT:    call void @llvm.donothing()3791; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643792; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763793; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3794; CHECK-NEXT:    [[TMP13:%.*]] = call { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr [[TMP3]])3795; CHECK-NEXT:    [[TMP4:%.*]] = call { <1 x double>, <1 x double>, <1 x double>, <1 x double> } @llvm.aarch64.neon.ld1x4.v1f64.p0(ptr [[ADDR]])3796; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 03797; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 03798; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } { <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1), <1 x i64> splat (i64 -1) }, <1 x i64> [[TMP15]], 03799; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X4_T:%.*]] poison, <1 x double> [[TMP5]], 03800; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 13801; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 13802; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP17]], <1 x i64> [[TMP19]], 13803; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X4_T]] [[TMP6]], <1 x double> [[TMP7]], 13804; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 23805; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 23806; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP21]], <1 x i64> [[TMP14]], 23807; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X4_T]] [[TMP8]], <1 x double> [[TMP9]], 23808; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP13]], 33809; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <1 x double>, <1 x double>, <1 x double>, <1 x double> } [[TMP4]], 33810; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP16]], <1 x i64> [[TMP18]], 33811; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X1X4_T]] [[TMP10]], <1 x double> [[TMP11]], 33812; CHECK-NEXT:    store { <1 x i64>, <1 x i64>, <1 x i64>, <1 x i64> } [[TMP20]], ptr @__msan_retval_tls, align 83813; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT64X1X4_T]] [[TMP12]]3814;3815  %val = call %struct.__neon_float64x1x4_t @llvm.aarch64.neon.ld1x4.v1f64.p0(ptr %addr)3816  ret %struct.__neon_float64x1x4_t %val3817}3818 3819declare %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr) nounwind readonly3820declare %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr) nounwind readonly3821declare %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr) nounwind readonly3822declare %struct.__neon_float32x4x4_t @llvm.aarch64.neon.ld1x4.v4f32.p0(ptr) nounwind readonly3823declare %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr) nounwind readonly3824declare %struct.__neon_float64x2x4_t @llvm.aarch64.neon.ld1x4.v2f64.p0(ptr) nounwind readonly3825 3826define %struct.__neon_int8x16x4_t @ld1_x4_v16i8(ptr %addr) #0 {3827; CHECK-LABEL: define %struct.__neon_int8x16x4_t @ld1_x4_v16i8(3828; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3829; CHECK-NEXT:    call void @llvm.donothing()3830; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643831; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763832; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3833; CHECK-NEXT:    [[TMP13:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr [[TMP3]])3834; CHECK-NEXT:    [[TMP4:%.*]] = call { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr [[ADDR]])3835; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 03836; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 03837; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } { <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1), <16 x i8> splat (i8 -1) }, <16 x i8> [[TMP15]], 03838; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T:%.*]] poison, <16 x i8> [[TMP5]], 03839; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 13840; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 13841; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP17]], <16 x i8> [[TMP19]], 13842; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP6]], <16 x i8> [[TMP7]], 13843; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 23844; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 23845; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP21]], <16 x i8> [[TMP14]], 23846; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP8]], <16 x i8> [[TMP9]], 23847; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP13]], 33848; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP4]], 33849; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP16]], <16 x i8> [[TMP18]], 33850; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT8X16X4_T]] [[TMP10]], <16 x i8> [[TMP11]], 33851; CHECK-NEXT:    store { <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8> } [[TMP20]], ptr @__msan_retval_tls, align 83852; CHECK-NEXT:    ret [[STRUCT___NEON_INT8X16X4_T]] [[TMP12]]3853;3854  %val = call %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr %addr)3855  ret %struct.__neon_int8x16x4_t %val3856}3857 3858define %struct.__neon_int16x8x4_t @ld1_x4_v8i16(ptr %addr) #0 {3859; CHECK-LABEL: define %struct.__neon_int16x8x4_t @ld1_x4_v8i16(3860; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3861; CHECK-NEXT:    call void @llvm.donothing()3862; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643863; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763864; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3865; CHECK-NEXT:    [[TMP13:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr [[TMP3]])3866; CHECK-NEXT:    [[TMP4:%.*]] = call { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr [[ADDR]])3867; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 03868; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 03869; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } { <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1), <8 x i16> splat (i16 -1) }, <8 x i16> [[TMP15]], 03870; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T:%.*]] poison, <8 x i16> [[TMP5]], 03871; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 13872; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 13873; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP17]], <8 x i16> [[TMP19]], 13874; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP6]], <8 x i16> [[TMP7]], 13875; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 23876; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 23877; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP21]], <8 x i16> [[TMP14]], 23878; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP8]], <8 x i16> [[TMP9]], 23879; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP13]], 33880; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP4]], 33881; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP16]], <8 x i16> [[TMP18]], 33882; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT16X8X4_T]] [[TMP10]], <8 x i16> [[TMP11]], 33883; CHECK-NEXT:    store { <8 x i16>, <8 x i16>, <8 x i16>, <8 x i16> } [[TMP20]], ptr @__msan_retval_tls, align 83884; CHECK-NEXT:    ret [[STRUCT___NEON_INT16X8X4_T]] [[TMP12]]3885;3886  %val = call %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr %addr)3887  ret %struct.__neon_int16x8x4_t %val3888}3889 3890define %struct.__neon_int32x4x4_t @ld1_x4_v4i32(ptr %addr) #0 {3891; CHECK-LABEL: define %struct.__neon_int32x4x4_t @ld1_x4_v4i32(3892; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3893; CHECK-NEXT:    call void @llvm.donothing()3894; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643895; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763896; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3897; CHECK-NEXT:    [[TMP13:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr [[TMP3]])3898; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr [[ADDR]])3899; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 03900; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 03901; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP15]], 03902; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T:%.*]] poison, <4 x i32> [[TMP5]], 03903; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 13904; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 13905; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP17]], <4 x i32> [[TMP19]], 13906; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP6]], <4 x i32> [[TMP7]], 13907; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 23908; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 23909; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP21]], <4 x i32> [[TMP14]], 23910; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP8]], <4 x i32> [[TMP9]], 23911; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 33912; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP4]], 33913; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP16]], <4 x i32> [[TMP18]], 33914; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT32X4X4_T]] [[TMP10]], <4 x i32> [[TMP11]], 33915; CHECK-NEXT:    store { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP20]], ptr @__msan_retval_tls, align 83916; CHECK-NEXT:    ret [[STRUCT___NEON_INT32X4X4_T]] [[TMP12]]3917;3918  %val = call %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr %addr)3919  ret %struct.__neon_int32x4x4_t %val3920}3921 3922define %struct.__neon_float32x4x4_t @ld1_x4_v4f32(ptr %addr) #0 {3923; CHECK-LABEL: define %struct.__neon_float32x4x4_t @ld1_x4_v4f32(3924; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3925; CHECK-NEXT:    call void @llvm.donothing()3926; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643927; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763928; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3929; CHECK-NEXT:    [[TMP13:%.*]] = call { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr [[TMP3]])3930; CHECK-NEXT:    [[TMP4:%.*]] = call { <4 x float>, <4 x float>, <4 x float>, <4 x float> } @llvm.aarch64.neon.ld1x4.v4f32.p0(ptr [[ADDR]])3931; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 03932; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <4 x float>, <4 x float>, <4 x float>, <4 x float> } [[TMP4]], 03933; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } { <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1), <4 x i32> splat (i32 -1) }, <4 x i32> [[TMP15]], 03934; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X4X4_T:%.*]] poison, <4 x float> [[TMP5]], 03935; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 13936; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <4 x float>, <4 x float>, <4 x float>, <4 x float> } [[TMP4]], 13937; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP17]], <4 x i32> [[TMP19]], 13938; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X4X4_T]] [[TMP6]], <4 x float> [[TMP7]], 13939; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 23940; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <4 x float>, <4 x float>, <4 x float>, <4 x float> } [[TMP4]], 23941; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP21]], <4 x i32> [[TMP14]], 23942; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X4X4_T]] [[TMP8]], <4 x float> [[TMP9]], 23943; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP13]], 33944; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <4 x float>, <4 x float>, <4 x float>, <4 x float> } [[TMP4]], 33945; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP16]], <4 x i32> [[TMP18]], 33946; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_FLOAT32X4X4_T]] [[TMP10]], <4 x float> [[TMP11]], 33947; CHECK-NEXT:    store { <4 x i32>, <4 x i32>, <4 x i32>, <4 x i32> } [[TMP20]], ptr @__msan_retval_tls, align 83948; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT32X4X4_T]] [[TMP12]]3949;3950  %val = call %struct.__neon_float32x4x4_t @llvm.aarch64.neon.ld1x4.v4f32.p0(ptr %addr)3951  ret %struct.__neon_float32x4x4_t %val3952}3953 3954define %struct.__neon_int64x2x4_t @ld1_x4_v2i64(ptr %addr) #0 {3955; CHECK-LABEL: define %struct.__neon_int64x2x4_t @ld1_x4_v2i64(3956; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3957; CHECK-NEXT:    call void @llvm.donothing()3958; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643959; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763960; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3961; CHECK-NEXT:    [[TMP13:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr [[TMP3]])3962; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr [[ADDR]])3963; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 03964; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 03965; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP15]], 03966; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T:%.*]] poison, <2 x i64> [[TMP5]], 03967; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 13968; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 13969; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP17]], <2 x i64> [[TMP19]], 13970; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP6]], <2 x i64> [[TMP7]], 13971; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 23972; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 23973; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP21]], <2 x i64> [[TMP14]], 23974; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP8]], <2 x i64> [[TMP9]], 23975; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 33976; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP4]], 33977; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP16]], <2 x i64> [[TMP18]], 33978; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_INT64X2X4_T]] [[TMP10]], <2 x i64> [[TMP11]], 33979; CHECK-NEXT:    store { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP20]], ptr @__msan_retval_tls, align 83980; CHECK-NEXT:    ret [[STRUCT___NEON_INT64X2X4_T]] [[TMP12]]3981;3982  %val = call %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr %addr)3983  ret %struct.__neon_int64x2x4_t %val3984}3985 3986define %struct.__neon_float64x2x4_t @ld1_x4_v2f64(ptr %addr) #0 {3987; CHECK-LABEL: define %struct.__neon_float64x2x4_t @ld1_x4_v2f64(3988; CHECK-SAME: ptr [[ADDR:%.*]]) #[[ATTR1]] {3989; CHECK-NEXT:    call void @llvm.donothing()3990; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[ADDR]] to i643991; CHECK-NEXT:    [[TMP2:%.*]] = xor i64 [[TMP1]], 1935140464885763992; CHECK-NEXT:    [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr3993; CHECK-NEXT:    [[TMP13:%.*]] = call { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr [[TMP3]])3994; CHECK-NEXT:    [[TMP4:%.*]] = call { <2 x double>, <2 x double>, <2 x double>, <2 x double> } @llvm.aarch64.neon.ld1x4.v2f64.p0(ptr [[ADDR]])3995; CHECK-NEXT:    [[TMP15:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 03996; CHECK-NEXT:    [[TMP5:%.*]] = extractvalue { <2 x double>, <2 x double>, <2 x double>, <2 x double> } [[TMP4]], 03997; CHECK-NEXT:    [[TMP17:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } { <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1), <2 x i64> splat (i64 -1) }, <2 x i64> [[TMP15]], 03998; CHECK-NEXT:    [[TMP6:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X2X4_T:%.*]] poison, <2 x double> [[TMP5]], 03999; CHECK-NEXT:    [[TMP19:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 14000; CHECK-NEXT:    [[TMP7:%.*]] = extractvalue { <2 x double>, <2 x double>, <2 x double>, <2 x double> } [[TMP4]], 14001; CHECK-NEXT:    [[TMP21:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP17]], <2 x i64> [[TMP19]], 14002; CHECK-NEXT:    [[TMP8:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X2X4_T]] [[TMP6]], <2 x double> [[TMP7]], 14003; CHECK-NEXT:    [[TMP14:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 24004; CHECK-NEXT:    [[TMP9:%.*]] = extractvalue { <2 x double>, <2 x double>, <2 x double>, <2 x double> } [[TMP4]], 24005; CHECK-NEXT:    [[TMP16:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP21]], <2 x i64> [[TMP14]], 24006; CHECK-NEXT:    [[TMP10:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X2X4_T]] [[TMP8]], <2 x double> [[TMP9]], 24007; CHECK-NEXT:    [[TMP18:%.*]] = extractvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP13]], 34008; CHECK-NEXT:    [[TMP11:%.*]] = extractvalue { <2 x double>, <2 x double>, <2 x double>, <2 x double> } [[TMP4]], 34009; CHECK-NEXT:    [[TMP20:%.*]] = insertvalue { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP16]], <2 x i64> [[TMP18]], 34010; CHECK-NEXT:    [[TMP12:%.*]] = insertvalue [[STRUCT___NEON_FLOAT64X2X4_T]] [[TMP10]], <2 x double> [[TMP11]], 34011; CHECK-NEXT:    store { <2 x i64>, <2 x i64>, <2 x i64>, <2 x i64> } [[TMP20]], ptr @__msan_retval_tls, align 84012; CHECK-NEXT:    ret [[STRUCT___NEON_FLOAT64X2X4_T]] [[TMP12]]4013;4014  %val = call %struct.__neon_float64x2x4_t @llvm.aarch64.neon.ld1x4.v2f64.p0(ptr %addr)4015  ret %struct.__neon_float64x2x4_t %val4016}4017 4018define <8 x i8> @dup_ld1_from_stack(ptr %__ret) #0 {4019; CHECK-LABEL: define <8 x i8> @dup_ld1_from_stack(4020; CHECK-SAME: ptr [[__RET:%.*]]) #[[ATTR1]] {4021; CHECK-NEXT:  entry:4022; CHECK-NEXT:    call void @llvm.donothing()4023; CHECK-NEXT:    [[ITEM:%.*]] = alloca i8, align 14024; CHECK-NEXT:    [[TMP0:%.*]] = ptrtoint ptr [[ITEM]] to i644025; CHECK-NEXT:    [[TMP1:%.*]] = xor i64 [[TMP0]], 1935140464885764026; CHECK-NEXT:    [[TMP2:%.*]] = inttoptr i64 [[TMP1]] to ptr4027; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr align 1 [[TMP2]], i8 -1, i64 1, i1 false)4028; CHECK-NEXT:    [[TMP3:%.*]] = load i8, ptr [[ITEM]], align 14029; CHECK-NEXT:    [[TMP4:%.*]] = ptrtoint ptr [[ITEM]] to i644030; CHECK-NEXT:    [[TMP5:%.*]] = xor i64 [[TMP4]], 1935140464885764031; CHECK-NEXT:    [[TMP6:%.*]] = inttoptr i64 [[TMP5]] to ptr4032; CHECK-NEXT:    [[_MSLD:%.*]] = load i8, ptr [[TMP6]], align 14033; CHECK-NEXT:    [[_MSPROP:%.*]] = insertelement <8 x i8> splat (i8 -1), i8 [[_MSLD]], i32 04034; CHECK-NEXT:    [[TMP7:%.*]] = insertelement <8 x i8> poison, i8 [[TMP3]], i32 04035; CHECK-NEXT:    [[_MSPROP1:%.*]] = shufflevector <8 x i8> [[_MSPROP]], <8 x i8> [[_MSPROP]], <8 x i32> zeroinitializer4036; CHECK-NEXT:    [[LANE:%.*]] = shufflevector <8 x i8> [[TMP7]], <8 x i8> [[TMP7]], <8 x i32> zeroinitializer4037; CHECK-NEXT:    store <8 x i8> [[_MSPROP1]], ptr @__msan_retval_tls, align 84038; CHECK-NEXT:    ret <8 x i8> [[LANE]]4039;4040entry:4041  %item = alloca i8, align 14042  %0 = load i8, ptr %item, align 14043  %1 = insertelement <8 x i8> poison, i8 %0, i32 04044  %lane = shufflevector <8 x i8> %1, <8 x i8> %1, <8 x i32> zeroinitializer4045  ret <8 x i8> %lane4046}4047 4048attributes #0 = { sanitize_memory }4049;.4050; CHECK: [[PROF1]] = !{!"branch_weights", i32 1, i32 1048575}4051;.4052