brintos

brintos / llvm-project-archived public Read only

0
0
Text · 68.2 KiB · c2b2c1e Raw
1672 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc < %s -global-isel=1 -global-isel-abort=1 -mtriple=arm64-eabi -aarch64-neon-syntax=apple -verify-machineinstrs | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5%struct.__neon_int8x8x2_t = type { <8 x i8>,  <8 x i8> }6%struct.__neon_int8x8x3_t = type { <8 x i8>,  <8 x i8>,  <8 x i8> }7%struct.__neon_int8x8x4_t = type { <8 x i8>,  <8 x i8>, <8 x i8>,  <8 x i8> }8 9define %struct.__neon_int8x8x2_t @ld2_8b(ptr %A) nounwind {10; CHECK-LABEL: ld2_8b:11; CHECK:       // %bb.0:12; CHECK-NEXT:    ld2.8b { v0, v1 }, [x0]13; CHECK-NEXT:    ret14; Make sure we are loading into the results defined by the ABI (i.e., v0, v1)15; and from the argument of the function also defined by ABI (i.e., x0)16	%tmp2 = call %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld2.v8i8.p0(ptr %A)17	ret %struct.__neon_int8x8x2_t  %tmp218}19 20define %struct.__neon_int8x8x3_t @ld3_8b(ptr %A) nounwind {21; CHECK-LABEL: ld3_8b:22; CHECK:       // %bb.0:23; CHECK-NEXT:    ld3.8b { v0, v1, v2 }, [x0]24; CHECK-NEXT:    ret25; Make sure we are using the operands defined by the ABI26	%tmp2 = call %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld3.v8i8.p0(ptr %A)27	ret %struct.__neon_int8x8x3_t  %tmp228}29 30define %struct.__neon_int8x8x4_t @ld4_8b(ptr %A) nounwind {31; CHECK-LABEL: ld4_8b:32; CHECK:       // %bb.0:33; CHECK-NEXT:    ld4.8b { v0, v1, v2, v3 }, [x0]34; CHECK-NEXT:    ret35; Make sure we are using the operands defined by the ABI36	%tmp2 = call %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld4.v8i8.p0(ptr %A)37	ret %struct.__neon_int8x8x4_t  %tmp238}39 40declare %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld2.v8i8.p0(ptr) nounwind readonly41declare %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld3.v8i8.p0(ptr) nounwind readonly42declare %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld4.v8i8.p0(ptr) nounwind readonly43 44%struct.__neon_int8x16x2_t = type { <16 x i8>,  <16 x i8> }45%struct.__neon_int8x16x3_t = type { <16 x i8>,  <16 x i8>,  <16 x i8> }46%struct.__neon_int8x16x4_t = type { <16 x i8>,  <16 x i8>, <16 x i8>,  <16 x i8> }47 48define %struct.__neon_int8x16x2_t @ld2_16b(ptr %A) nounwind {49; CHECK-LABEL: ld2_16b:50; CHECK:       // %bb.0:51; CHECK-NEXT:    ld2.16b { v0, v1 }, [x0]52; CHECK-NEXT:    ret53; Make sure we are using the operands defined by the ABI54  %tmp2 = call %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2.v16i8.p0(ptr %A)55  ret %struct.__neon_int8x16x2_t  %tmp256}57 58define %struct.__neon_int8x16x3_t @ld3_16b(ptr %A) nounwind {59; CHECK-LABEL: ld3_16b:60; CHECK:       // %bb.0:61; CHECK-NEXT:    ld3.16b { v0, v1, v2 }, [x0]62; CHECK-NEXT:    ret63; Make sure we are using the operands defined by the ABI64  %tmp2 = call %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld3.v16i8.p0(ptr %A)65  ret %struct.__neon_int8x16x3_t  %tmp266}67 68define %struct.__neon_int8x16x4_t @ld4_16b(ptr %A) nounwind {69; CHECK-LABEL: ld4_16b:70; CHECK:       // %bb.0:71; CHECK-NEXT:    ld4.16b { v0, v1, v2, v3 }, [x0]72; CHECK-NEXT:    ret73; Make sure we are using the operands defined by the ABI74  %tmp2 = call %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld4.v16i8.p0(ptr %A)75  ret %struct.__neon_int8x16x4_t  %tmp276}77 78declare %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2.v16i8.p0(ptr) nounwind readonly79declare %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld3.v16i8.p0(ptr) nounwind readonly80declare %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld4.v16i8.p0(ptr) nounwind readonly81 82%struct.__neon_int16x4x2_t = type { <4 x i16>,  <4 x i16> }83%struct.__neon_int16x4x3_t = type { <4 x i16>,  <4 x i16>,  <4 x i16> }84%struct.__neon_int16x4x4_t = type { <4 x i16>,  <4 x i16>, <4 x i16>,  <4 x i16> }85 86define %struct.__neon_int16x4x2_t @ld2_4h(ptr %A) nounwind {87; CHECK-LABEL: ld2_4h:88; CHECK:       // %bb.0:89; CHECK-NEXT:    ld2.4h { v0, v1 }, [x0]90; CHECK-NEXT:    ret91; Make sure we are using the operands defined by the ABI92	%tmp2 = call %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld2.v4i16.p0(ptr %A)93	ret %struct.__neon_int16x4x2_t  %tmp294}95 96define %struct.__neon_int16x4x3_t @ld3_4h(ptr %A) nounwind {97; CHECK-LABEL: ld3_4h:98; CHECK:       // %bb.0:99; CHECK-NEXT:    ld3.4h { v0, v1, v2 }, [x0]100; CHECK-NEXT:    ret101; Make sure we are using the operands defined by the ABI102	%tmp2 = call %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld3.v4i16.p0(ptr %A)103	ret %struct.__neon_int16x4x3_t  %tmp2104}105 106define %struct.__neon_int16x4x4_t @ld4_4h(ptr %A) nounwind {107; CHECK-LABEL: ld4_4h:108; CHECK:       // %bb.0:109; CHECK-NEXT:    ld4.4h { v0, v1, v2, v3 }, [x0]110; CHECK-NEXT:    ret111; Make sure we are using the operands defined by the ABI112	%tmp2 = call %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld4.v4i16.p0(ptr %A)113	ret %struct.__neon_int16x4x4_t  %tmp2114}115 116declare %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld2.v4i16.p0(ptr) nounwind readonly117declare %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld3.v4i16.p0(ptr) nounwind readonly118declare %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld4.v4i16.p0(ptr) nounwind readonly119 120%struct.__neon_int16x8x2_t = type { <8 x i16>,  <8 x i16> }121%struct.__neon_int16x8x3_t = type { <8 x i16>,  <8 x i16>,  <8 x i16> }122%struct.__neon_int16x8x4_t = type { <8 x i16>,  <8 x i16>, <8 x i16>,  <8 x i16> }123 124define %struct.__neon_int16x8x2_t @ld2_8h(ptr %A) nounwind {125; CHECK-LABEL: ld2_8h:126; CHECK:       // %bb.0:127; CHECK-NEXT:    ld2.8h { v0, v1 }, [x0]128; CHECK-NEXT:    ret129; Make sure we are using the operands defined by the ABI130  %tmp2 = call %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2.v8i16.p0(ptr %A)131  ret %struct.__neon_int16x8x2_t  %tmp2132}133 134define %struct.__neon_int16x8x3_t @ld3_8h(ptr %A) nounwind {135; CHECK-LABEL: ld3_8h:136; CHECK:       // %bb.0:137; CHECK-NEXT:    ld3.8h { v0, v1, v2 }, [x0]138; CHECK-NEXT:    ret139; Make sure we are using the operands defined by the ABI140  %tmp2 = call %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld3.v8i16.p0(ptr %A)141  ret %struct.__neon_int16x8x3_t %tmp2142}143 144define %struct.__neon_int16x8x4_t @ld4_8h(ptr %A) nounwind {145; CHECK-LABEL: ld4_8h:146; CHECK:       // %bb.0:147; CHECK-NEXT:    ld4.8h { v0, v1, v2, v3 }, [x0]148; CHECK-NEXT:    ret149; Make sure we are using the operands defined by the ABI150  %tmp2 = call %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld4.v8i16.p0(ptr %A)151  ret %struct.__neon_int16x8x4_t  %tmp2152}153 154declare %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2.v8i16.p0(ptr) nounwind readonly155declare %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld3.v8i16.p0(ptr) nounwind readonly156declare %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld4.v8i16.p0(ptr) nounwind readonly157 158%struct.__neon_int32x2x2_t = type { <2 x i32>,  <2 x i32> }159%struct.__neon_int32x2x3_t = type { <2 x i32>,  <2 x i32>,  <2 x i32> }160%struct.__neon_int32x2x4_t = type { <2 x i32>,  <2 x i32>, <2 x i32>,  <2 x i32> }161 162define %struct.__neon_int32x2x2_t @ld2_2s(ptr %A) nounwind {163; CHECK-LABEL: ld2_2s:164; CHECK:       // %bb.0:165; CHECK-NEXT:    ld2.2s { v0, v1 }, [x0]166; CHECK-NEXT:    ret167; Make sure we are using the operands defined by the ABI168	%tmp2 = call %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld2.v2i32.p0(ptr %A)169	ret %struct.__neon_int32x2x2_t  %tmp2170}171 172define %struct.__neon_int32x2x3_t @ld3_2s(ptr %A) nounwind {173; CHECK-LABEL: ld3_2s:174; CHECK:       // %bb.0:175; CHECK-NEXT:    ld3.2s { v0, v1, v2 }, [x0]176; CHECK-NEXT:    ret177; Make sure we are using the operands defined by the ABI178	%tmp2 = call %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld3.v2i32.p0(ptr %A)179	ret %struct.__neon_int32x2x3_t  %tmp2180}181 182define %struct.__neon_int32x2x4_t @ld4_2s(ptr %A) nounwind {183; CHECK-LABEL: ld4_2s:184; CHECK:       // %bb.0:185; CHECK-NEXT:    ld4.2s { v0, v1, v2, v3 }, [x0]186; CHECK-NEXT:    ret187; Make sure we are using the operands defined by the ABI188	%tmp2 = call %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld4.v2i32.p0(ptr %A)189	ret %struct.__neon_int32x2x4_t  %tmp2190}191 192declare %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld2.v2i32.p0(ptr) nounwind readonly193declare %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld3.v2i32.p0(ptr) nounwind readonly194declare %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld4.v2i32.p0(ptr) nounwind readonly195 196%struct.__neon_int32x4x2_t = type { <4 x i32>,  <4 x i32> }197%struct.__neon_int32x4x3_t = type { <4 x i32>,  <4 x i32>,  <4 x i32> }198%struct.__neon_int32x4x4_t = type { <4 x i32>,  <4 x i32>, <4 x i32>,  <4 x i32> }199 200define %struct.__neon_int32x4x2_t @ld2_4s(ptr %A) nounwind {201; CHECK-LABEL: ld2_4s:202; CHECK:       // %bb.0:203; CHECK-NEXT:    ld2.4s { v0, v1 }, [x0]204; CHECK-NEXT:    ret205; Make sure we are using the operands defined by the ABI206	%tmp2 = call %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2.v4i32.p0(ptr %A)207	ret %struct.__neon_int32x4x2_t  %tmp2208}209 210define %struct.__neon_int32x4x3_t @ld3_4s(ptr %A) nounwind {211; CHECK-LABEL: ld3_4s:212; CHECK:       // %bb.0:213; CHECK-NEXT:    ld3.4s { v0, v1, v2 }, [x0]214; CHECK-NEXT:    ret215; Make sure we are using the operands defined by the ABI216	%tmp2 = call %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld3.v4i32.p0(ptr %A)217	ret %struct.__neon_int32x4x3_t  %tmp2218}219 220define %struct.__neon_int32x4x4_t @ld4_4s(ptr %A) nounwind {221; CHECK-LABEL: ld4_4s:222; CHECK:       // %bb.0:223; CHECK-NEXT:    ld4.4s { v0, v1, v2, v3 }, [x0]224; CHECK-NEXT:    ret225; Make sure we are using the operands defined by the ABI226	%tmp2 = call %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld4.v4i32.p0(ptr %A)227	ret %struct.__neon_int32x4x4_t  %tmp2228}229 230declare %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2.v4i32.p0(ptr) nounwind readonly231declare %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld3.v4i32.p0(ptr) nounwind readonly232declare %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld4.v4i32.p0(ptr) nounwind readonly233 234%struct.__neon_int64x2x2_t = type { <2 x i64>,  <2 x i64> }235%struct.__neon_int64x2x3_t = type { <2 x i64>,  <2 x i64>,  <2 x i64> }236%struct.__neon_int64x2x4_t = type { <2 x i64>,  <2 x i64>, <2 x i64>,  <2 x i64> }237 238define %struct.__neon_int64x2x2_t @ld2_2d(ptr %A) nounwind {239; CHECK-LABEL: ld2_2d:240; CHECK:       // %bb.0:241; CHECK-NEXT:    ld2.2d { v0, v1 }, [x0]242; CHECK-NEXT:    ret243; Make sure we are using the operands defined by the ABI244	%tmp2 = call %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2.v2i64.p0(ptr %A)245	ret %struct.__neon_int64x2x2_t  %tmp2246}247 248define %struct.__neon_int64x2x3_t @ld3_2d(ptr %A) nounwind {249; CHECK-LABEL: ld3_2d:250; CHECK:       // %bb.0:251; CHECK-NEXT:    ld3.2d { v0, v1, v2 }, [x0]252; CHECK-NEXT:    ret253; Make sure we are using the operands defined by the ABI254	%tmp2 = call %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld3.v2i64.p0(ptr %A)255	ret %struct.__neon_int64x2x3_t  %tmp2256}257 258define %struct.__neon_int64x2x4_t @ld4_2d(ptr %A) nounwind {259; CHECK-LABEL: ld4_2d:260; CHECK:       // %bb.0:261; CHECK-NEXT:    ld4.2d { v0, v1, v2, v3 }, [x0]262; CHECK-NEXT:    ret263; Make sure we are using the operands defined by the ABI264	%tmp2 = call %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld4.v2i64.p0(ptr %A)265	ret %struct.__neon_int64x2x4_t  %tmp2266}267 268declare %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2.v2i64.p0(ptr) nounwind readonly269declare %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld3.v2i64.p0(ptr) nounwind readonly270declare %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld4.v2i64.p0(ptr) nounwind readonly271 272%struct.__neon_int64x1x2_t = type { <1 x i64>,  <1 x i64> }273%struct.__neon_int64x1x3_t = type { <1 x i64>,  <1 x i64>, <1 x i64> }274%struct.__neon_int64x1x4_t = type { <1 x i64>,  <1 x i64>, <1 x i64>, <1 x i64> }275 276 277define %struct.__neon_int64x1x2_t @ld2_1di64(ptr %A) nounwind {278; CHECK-LABEL: ld2_1di64:279; CHECK:       // %bb.0:280; CHECK-NEXT:    ld1.1d { v0, v1 }, [x0]281; CHECK-NEXT:    ret282; Make sure we are using the operands defined by the ABI283	%tmp2 = call %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld2.v1i64.p0(ptr %A)284	ret %struct.__neon_int64x1x2_t  %tmp2285}286 287define %struct.__neon_int64x1x3_t @ld3_1di64(ptr %A) nounwind {288; CHECK-LABEL: ld3_1di64:289; CHECK:       // %bb.0:290; CHECK-NEXT:    ld1.1d { v0, v1, v2 }, [x0]291; CHECK-NEXT:    ret292; Make sure we are using the operands defined by the ABI293	%tmp2 = call %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld3.v1i64.p0(ptr %A)294	ret %struct.__neon_int64x1x3_t  %tmp2295}296 297define %struct.__neon_int64x1x4_t @ld4_1di64(ptr %A) nounwind {298; CHECK-LABEL: ld4_1di64:299; CHECK:       // %bb.0:300; CHECK-NEXT:    ld1.1d { v0, v1, v2, v3 }, [x0]301; CHECK-NEXT:    ret302; Make sure we are using the operands defined by the ABI303	%tmp2 = call %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld4.v1i64.p0(ptr %A)304	ret %struct.__neon_int64x1x4_t  %tmp2305}306 307 308declare %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld2.v1i64.p0(ptr) nounwind readonly309declare %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld3.v1i64.p0(ptr) nounwind readonly310declare %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld4.v1i64.p0(ptr) nounwind readonly311 312%struct.__neon_float64x1x2_t = type { <1 x double>,  <1 x double> }313%struct.__neon_float64x1x3_t = type { <1 x double>,  <1 x double>, <1 x double> }314%struct.__neon_float64x1x4_t = type { <1 x double>,  <1 x double>, <1 x double>, <1 x double> }315 316 317define %struct.__neon_float64x1x2_t @ld2_1df64(ptr %A) nounwind {318; CHECK-LABEL: ld2_1df64:319; CHECK:       // %bb.0:320; CHECK-NEXT:    ld1.1d { v0, v1 }, [x0]321; CHECK-NEXT:    ret322; Make sure we are using the operands defined by the ABI323	%tmp2 = call %struct.__neon_float64x1x2_t @llvm.aarch64.neon.ld2.v1f64.p0(ptr %A)324	ret %struct.__neon_float64x1x2_t  %tmp2325}326 327define %struct.__neon_float64x1x3_t @ld3_1df64(ptr %A) nounwind {328; CHECK-LABEL: ld3_1df64:329; CHECK:       // %bb.0:330; CHECK-NEXT:    ld1.1d { v0, v1, v2 }, [x0]331; CHECK-NEXT:    ret332; Make sure we are using the operands defined by the ABI333	%tmp2 = call %struct.__neon_float64x1x3_t @llvm.aarch64.neon.ld3.v1f64.p0(ptr %A)334	ret %struct.__neon_float64x1x3_t  %tmp2335}336 337define %struct.__neon_float64x1x4_t @ld4_1df64(ptr %A) nounwind {338; CHECK-LABEL: ld4_1df64:339; CHECK:       // %bb.0:340; CHECK-NEXT:    ld1.1d { v0, v1, v2, v3 }, [x0]341; CHECK-NEXT:    ret342; Make sure we are using the operands defined by the ABI343	%tmp2 = call %struct.__neon_float64x1x4_t @llvm.aarch64.neon.ld4.v1f64.p0(ptr %A)344	ret %struct.__neon_float64x1x4_t  %tmp2345}346 347declare %struct.__neon_float64x1x2_t @llvm.aarch64.neon.ld2.v1f64.p0(ptr) nounwind readonly348declare %struct.__neon_float64x1x3_t @llvm.aarch64.neon.ld3.v1f64.p0(ptr) nounwind readonly349declare %struct.__neon_float64x1x4_t @llvm.aarch64.neon.ld4.v1f64.p0(ptr) nounwind readonly350 351 352define %struct.__neon_int8x16x2_t @ld2lane_16b(<16 x i8> %L1, <16 x i8> %L2, ptr %A) nounwind {353; Make sure we are using the operands defined by the ABI354; CHECK-SD-LABEL: ld2lane_16b:355; CHECK-SD:       // %bb.0:356; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1357; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1358; CHECK-SD-NEXT:    ld2.b { v0, v1 }[1], [x0]359; CHECK-SD-NEXT:    ret360;361; CHECK-GI-LABEL: ld2lane_16b:362; CHECK-GI:       // %bb.0:363; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1364; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1365; CHECK-GI-NEXT:    ld2.b { v0, v1 }[1], [x0]366; CHECK-GI-NEXT:    ret367	%tmp2 = call %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8> %L1, <16 x i8> %L2, i64 1, ptr %A)368	ret %struct.__neon_int8x16x2_t  %tmp2369}370 371define %struct.__neon_int8x16x3_t @ld3lane_16b(<16 x i8> %L1, <16 x i8> %L2, <16 x i8> %L3, ptr %A) nounwind {372; Make sure we are using the operands defined by the ABI373; CHECK-SD-LABEL: ld3lane_16b:374; CHECK-SD:       // %bb.0:375; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2376; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2377; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2378; CHECK-SD-NEXT:    ld3.b { v0, v1, v2 }[1], [x0]379; CHECK-SD-NEXT:    ret380;381; CHECK-GI-LABEL: ld3lane_16b:382; CHECK-GI:       // %bb.0:383; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2384; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2385; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2386; CHECK-GI-NEXT:    ld3.b { v0, v1, v2 }[1], [x0]387; CHECK-GI-NEXT:    ret388	%tmp2 = 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)389	ret %struct.__neon_int8x16x3_t  %tmp2390}391 392define %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 {393; Make sure we are using the operands defined by the ABI394; CHECK-SD-LABEL: ld4lane_16b:395; CHECK-SD:       // %bb.0:396; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3397; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3398; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3399; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3400; CHECK-SD-NEXT:    ld4.b { v0, v1, v2, v3 }[1], [x0]401; CHECK-SD-NEXT:    ret402;403; CHECK-GI-LABEL: ld4lane_16b:404; CHECK-GI:       // %bb.0:405; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3406; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3407; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3408; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3409; CHECK-GI-NEXT:    ld4.b { v0, v1, v2, v3 }[1], [x0]410; CHECK-GI-NEXT:    ret411	%tmp2 = 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)412	ret %struct.__neon_int8x16x4_t  %tmp2413}414 415declare %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2lane.v16i8.p0(<16 x i8>, <16 x i8>, i64, ptr) nounwind readonly416declare %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld3lane.v16i8.p0(<16 x i8>, <16 x i8>, <16 x i8>, i64, ptr) nounwind readonly417declare %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 readonly418 419define %struct.__neon_int16x8x2_t @ld2lane_8h(<8 x i16> %L1, <8 x i16> %L2, ptr %A) nounwind {420; Make sure we are using the operands defined by the ABI421; CHECK-SD-LABEL: ld2lane_8h:422; CHECK-SD:       // %bb.0:423; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1424; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1425; CHECK-SD-NEXT:    ld2.h { v0, v1 }[1], [x0]426; CHECK-SD-NEXT:    ret427;428; CHECK-GI-LABEL: ld2lane_8h:429; CHECK-GI:       // %bb.0:430; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1431; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1432; CHECK-GI-NEXT:    ld2.h { v0, v1 }[1], [x0]433; CHECK-GI-NEXT:    ret434	%tmp2 = call %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16> %L1, <8 x i16> %L2, i64 1, ptr %A)435	ret %struct.__neon_int16x8x2_t  %tmp2436}437 438define %struct.__neon_int16x8x3_t @ld3lane_8h(<8 x i16> %L1, <8 x i16> %L2, <8 x i16> %L3, ptr %A) nounwind {439; Make sure we are using the operands defined by the ABI440; CHECK-SD-LABEL: ld3lane_8h:441; CHECK-SD:       // %bb.0:442; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2443; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2444; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2445; CHECK-SD-NEXT:    ld3.h { v0, v1, v2 }[1], [x0]446; CHECK-SD-NEXT:    ret447;448; CHECK-GI-LABEL: ld3lane_8h:449; CHECK-GI:       // %bb.0:450; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2451; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2452; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2453; CHECK-GI-NEXT:    ld3.h { v0, v1, v2 }[1], [x0]454; CHECK-GI-NEXT:    ret455	%tmp2 = 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)456	ret %struct.__neon_int16x8x3_t  %tmp2457}458 459define %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 {460; Make sure we are using the operands defined by the ABI461; CHECK-SD-LABEL: ld4lane_8h:462; CHECK-SD:       // %bb.0:463; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3464; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3465; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3466; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3467; CHECK-SD-NEXT:    ld4.h { v0, v1, v2, v3 }[1], [x0]468; CHECK-SD-NEXT:    ret469;470; CHECK-GI-LABEL: ld4lane_8h:471; CHECK-GI:       // %bb.0:472; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3473; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3474; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3475; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3476; CHECK-GI-NEXT:    ld4.h { v0, v1, v2, v3 }[1], [x0]477; CHECK-GI-NEXT:    ret478	%tmp2 = 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)479	ret %struct.__neon_int16x8x4_t  %tmp2480}481 482declare %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2lane.v8i16.p0(<8 x i16>, <8 x i16>, i64, ptr) nounwind readonly483declare %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld3lane.v8i16.p0(<8 x i16>, <8 x i16>, <8 x i16>, i64, ptr) nounwind readonly484declare %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 readonly485 486define %struct.__neon_int32x4x2_t @ld2lane_4s(<4 x i32> %L1, <4 x i32> %L2, ptr %A) nounwind {487; Make sure we are using the operands defined by the ABI488; CHECK-SD-LABEL: ld2lane_4s:489; CHECK-SD:       // %bb.0:490; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1491; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1492; CHECK-SD-NEXT:    ld2.s { v0, v1 }[1], [x0]493; CHECK-SD-NEXT:    ret494;495; CHECK-GI-LABEL: ld2lane_4s:496; CHECK-GI:       // %bb.0:497; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1498; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1499; CHECK-GI-NEXT:    ld2.s { v0, v1 }[1], [x0]500; CHECK-GI-NEXT:    ret501	%tmp2 = call %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32> %L1, <4 x i32> %L2, i64 1, ptr %A)502	ret %struct.__neon_int32x4x2_t  %tmp2503}504 505define %struct.__neon_int32x4x3_t @ld3lane_4s(<4 x i32> %L1, <4 x i32> %L2, <4 x i32> %L3, ptr %A) nounwind {506; Make sure we are using the operands defined by the ABI507; CHECK-SD-LABEL: ld3lane_4s:508; CHECK-SD:       // %bb.0:509; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2510; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2511; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2512; CHECK-SD-NEXT:    ld3.s { v0, v1, v2 }[1], [x0]513; CHECK-SD-NEXT:    ret514;515; CHECK-GI-LABEL: ld3lane_4s:516; CHECK-GI:       // %bb.0:517; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2518; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2519; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2520; CHECK-GI-NEXT:    ld3.s { v0, v1, v2 }[1], [x0]521; CHECK-GI-NEXT:    ret522	%tmp2 = 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)523	ret %struct.__neon_int32x4x3_t  %tmp2524}525 526define %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 {527; Make sure we are using the operands defined by the ABI528; CHECK-SD-LABEL: ld4lane_4s:529; CHECK-SD:       // %bb.0:530; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3531; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3532; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3533; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3534; CHECK-SD-NEXT:    ld4.s { v0, v1, v2, v3 }[1], [x0]535; CHECK-SD-NEXT:    ret536;537; CHECK-GI-LABEL: ld4lane_4s:538; CHECK-GI:       // %bb.0:539; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3540; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3541; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3542; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3543; CHECK-GI-NEXT:    ld4.s { v0, v1, v2, v3 }[1], [x0]544; CHECK-GI-NEXT:    ret545	%tmp2 = 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)546	ret %struct.__neon_int32x4x4_t  %tmp2547}548 549declare %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2lane.v4i32.p0(<4 x i32>, <4 x i32>, i64, ptr) nounwind readonly550declare %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld3lane.v4i32.p0(<4 x i32>, <4 x i32>, <4 x i32>, i64, ptr) nounwind readonly551declare %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 readonly552 553define %struct.__neon_int64x2x2_t @ld2lane_2d(<2 x i64> %L1, <2 x i64> %L2, ptr %A) nounwind {554; Make sure we are using the operands defined by the ABI555; CHECK-SD-LABEL: ld2lane_2d:556; CHECK-SD:       // %bb.0:557; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1558; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1559; CHECK-SD-NEXT:    ld2.d { v0, v1 }[1], [x0]560; CHECK-SD-NEXT:    ret561;562; CHECK-GI-LABEL: ld2lane_2d:563; CHECK-GI:       // %bb.0:564; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1565; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1566; CHECK-GI-NEXT:    ld2.d { v0, v1 }[1], [x0]567; CHECK-GI-NEXT:    ret568	%tmp2 = call %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64> %L1, <2 x i64> %L2, i64 1, ptr %A)569	ret %struct.__neon_int64x2x2_t  %tmp2570}571 572define %struct.__neon_int64x2x3_t @ld3lane_2d(<2 x i64> %L1, <2 x i64> %L2, <2 x i64> %L3, ptr %A) nounwind {573; Make sure we are using the operands defined by the ABI574; CHECK-SD-LABEL: ld3lane_2d:575; CHECK-SD:       // %bb.0:576; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2577; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2578; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2579; CHECK-SD-NEXT:    ld3.d { v0, v1, v2 }[1], [x0]580; CHECK-SD-NEXT:    ret581;582; CHECK-GI-LABEL: ld3lane_2d:583; CHECK-GI:       // %bb.0:584; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q2585; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q2586; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q2587; CHECK-GI-NEXT:    ld3.d { v0, v1, v2 }[1], [x0]588; CHECK-GI-NEXT:    ret589	%tmp2 = 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)590	ret %struct.__neon_int64x2x3_t  %tmp2591}592 593define %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 {594; Make sure we are using the operands defined by the ABI595; CHECK-SD-LABEL: ld4lane_2d:596; CHECK-SD:       // %bb.0:597; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3598; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3599; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3600; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3601; CHECK-SD-NEXT:    ld4.d { v0, v1, v2, v3 }[1], [x0]602; CHECK-SD-NEXT:    ret603;604; CHECK-GI-LABEL: ld4lane_2d:605; CHECK-GI:       // %bb.0:606; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3607; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3608; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3609; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3610; CHECK-GI-NEXT:    ld4.d { v0, v1, v2, v3 }[1], [x0]611; CHECK-GI-NEXT:    ret612	%tmp2 = 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)613	ret %struct.__neon_int64x2x4_t  %tmp2614}615 616declare %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2lane.v2i64.p0(<2 x i64>, <2 x i64>, i64, ptr) nounwind readonly617declare %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld3lane.v2i64.p0(<2 x i64>, <2 x i64>, <2 x i64>, i64, ptr) nounwind readonly618declare %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 readonly619 620define <8 x i8> @ld1r_8b(ptr %bar) {621; CHECK-LABEL: ld1r_8b:622; CHECK:       // %bb.0:623; CHECK-NEXT:    ld1r.8b { v0 }, [x0]624; CHECK-NEXT:    ret625; Make sure we are using the operands defined by the ABI626  %tmp1 = load i8, ptr %bar627  %tmp2 = insertelement <8 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, i8 %tmp1, i32 0628  %tmp3 = insertelement <8 x i8> %tmp2, i8 %tmp1, i32 1629  %tmp4 = insertelement <8 x i8> %tmp3, i8 %tmp1, i32 2630  %tmp5 = insertelement <8 x i8> %tmp4, i8 %tmp1, i32 3631  %tmp6 = insertelement <8 x i8> %tmp5, i8 %tmp1, i32 4632  %tmp7 = insertelement <8 x i8> %tmp6, i8 %tmp1, i32 5633  %tmp8 = insertelement <8 x i8> %tmp7, i8 %tmp1, i32 6634  %tmp9 = insertelement <8 x i8> %tmp8, i8 %tmp1, i32 7635  ret <8 x i8> %tmp9636}637 638define <16 x i8> @ld1r_16b(ptr %bar) {639; CHECK-LABEL: ld1r_16b:640; CHECK:       // %bb.0:641; CHECK-NEXT:    ld1r.16b { v0 }, [x0]642; CHECK-NEXT:    ret643; Make sure we are using the operands defined by the ABI644  %tmp1 = load i8, ptr %bar645  %tmp2 = insertelement <16 x i8> <i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef, i8 undef>, i8 %tmp1, i32 0646  %tmp3 = insertelement <16 x i8> %tmp2, i8 %tmp1, i32 1647  %tmp4 = insertelement <16 x i8> %tmp3, i8 %tmp1, i32 2648  %tmp5 = insertelement <16 x i8> %tmp4, i8 %tmp1, i32 3649  %tmp6 = insertelement <16 x i8> %tmp5, i8 %tmp1, i32 4650  %tmp7 = insertelement <16 x i8> %tmp6, i8 %tmp1, i32 5651  %tmp8 = insertelement <16 x i8> %tmp7, i8 %tmp1, i32 6652  %tmp9 = insertelement <16 x i8> %tmp8, i8 %tmp1, i32 7653  %tmp10 = insertelement <16 x i8> %tmp9, i8 %tmp1, i32 8654  %tmp11 = insertelement <16 x i8> %tmp10, i8 %tmp1, i32 9655  %tmp12 = insertelement <16 x i8> %tmp11, i8 %tmp1, i32 10656  %tmp13 = insertelement <16 x i8> %tmp12, i8 %tmp1, i32 11657  %tmp14 = insertelement <16 x i8> %tmp13, i8 %tmp1, i32 12658  %tmp15 = insertelement <16 x i8> %tmp14, i8 %tmp1, i32 13659  %tmp16 = insertelement <16 x i8> %tmp15, i8 %tmp1, i32 14660  %tmp17 = insertelement <16 x i8> %tmp16, i8 %tmp1, i32 15661  ret <16 x i8> %tmp17662}663 664define <4 x i16> @ld1r_4h(ptr %bar) {665; CHECK-LABEL: ld1r_4h:666; CHECK:       // %bb.0:667; CHECK-NEXT:    ld1r.4h { v0 }, [x0]668; CHECK-NEXT:    ret669; Make sure we are using the operands defined by the ABI670  %tmp1 = load i16, ptr %bar671  %tmp2 = insertelement <4 x i16> <i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0672  %tmp3 = insertelement <4 x i16> %tmp2, i16 %tmp1, i32 1673  %tmp4 = insertelement <4 x i16> %tmp3, i16 %tmp1, i32 2674  %tmp5 = insertelement <4 x i16> %tmp4, i16 %tmp1, i32 3675  ret <4 x i16> %tmp5676}677 678define <8 x i16> @ld1r_8h(ptr %bar) {679; CHECK-LABEL: ld1r_8h:680; CHECK:       // %bb.0:681; CHECK-NEXT:    ld1r.8h { v0 }, [x0]682; CHECK-NEXT:    ret683; Make sure we are using the operands defined by the ABI684  %tmp1 = load i16, ptr %bar685  %tmp2 = insertelement <8 x i16> <i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef, i16 undef>, i16 %tmp1, i32 0686  %tmp3 = insertelement <8 x i16> %tmp2, i16 %tmp1, i32 1687  %tmp4 = insertelement <8 x i16> %tmp3, i16 %tmp1, i32 2688  %tmp5 = insertelement <8 x i16> %tmp4, i16 %tmp1, i32 3689  %tmp6 = insertelement <8 x i16> %tmp5, i16 %tmp1, i32 4690  %tmp7 = insertelement <8 x i16> %tmp6, i16 %tmp1, i32 5691  %tmp8 = insertelement <8 x i16> %tmp7, i16 %tmp1, i32 6692  %tmp9 = insertelement <8 x i16> %tmp8, i16 %tmp1, i32 7693  ret <8 x i16> %tmp9694}695 696define <2 x i32> @ld1r_2s(ptr %bar) {697; CHECK-LABEL: ld1r_2s:698; CHECK:       // %bb.0:699; CHECK-NEXT:    ld1r.2s { v0 }, [x0]700; CHECK-NEXT:    ret701; Make sure we are using the operands defined by the ABI702  %tmp1 = load i32, ptr %bar703  %tmp2 = insertelement <2 x i32> <i32 undef, i32 undef>, i32 %tmp1, i32 0704  %tmp3 = insertelement <2 x i32> %tmp2, i32 %tmp1, i32 1705  ret <2 x i32> %tmp3706}707 708define <4 x i32> @ld1r_4s(ptr %bar) {709; CHECK-LABEL: ld1r_4s:710; CHECK:       // %bb.0:711; CHECK-NEXT:    ld1r.4s { v0 }, [x0]712; CHECK-NEXT:    ret713; Make sure we are using the operands defined by the ABI714  %tmp1 = load i32, ptr %bar715  %tmp2 = insertelement <4 x i32> <i32 undef, i32 undef, i32 undef, i32 undef>, i32 %tmp1, i32 0716  %tmp3 = insertelement <4 x i32> %tmp2, i32 %tmp1, i32 1717  %tmp4 = insertelement <4 x i32> %tmp3, i32 %tmp1, i32 2718  %tmp5 = insertelement <4 x i32> %tmp4, i32 %tmp1, i32 3719  ret <4 x i32> %tmp5720}721 722define <2 x i64> @ld1r_2d(ptr %bar) {723; CHECK-LABEL: ld1r_2d:724; CHECK:       // %bb.0:725; CHECK-NEXT:    ld1r.2d { v0 }, [x0]726; CHECK-NEXT:    ret727; Make sure we are using the operands defined by the ABI728  %tmp1 = load i64, ptr %bar729  %tmp2 = insertelement <2 x i64> <i64 undef, i64 undef>, i64 %tmp1, i32 0730  %tmp3 = insertelement <2 x i64> %tmp2, i64 %tmp1, i32 1731  ret <2 x i64> %tmp3732}733 734define %struct.__neon_int8x8x2_t @ld2r_8b(ptr %A) nounwind {735; CHECK-LABEL: ld2r_8b:736; CHECK:       // %bb.0:737; CHECK-NEXT:    ld2r.8b { v0, v1 }, [x0]738; CHECK-NEXT:    ret739; Make sure we are using the operands defined by the ABI740	%tmp2 = call %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld2r.v8i8.p0(ptr %A)741	ret %struct.__neon_int8x8x2_t  %tmp2742}743 744define %struct.__neon_int8x8x3_t @ld3r_8b(ptr %A) nounwind {745; CHECK-LABEL: ld3r_8b:746; CHECK:       // %bb.0:747; CHECK-NEXT:    ld3r.8b { v0, v1, v2 }, [x0]748; CHECK-NEXT:    ret749; Make sure we are using the operands defined by the ABI750	%tmp2 = call %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld3r.v8i8.p0(ptr %A)751	ret %struct.__neon_int8x8x3_t  %tmp2752}753 754define %struct.__neon_int8x8x4_t @ld4r_8b(ptr %A) nounwind {755; CHECK-LABEL: ld4r_8b:756; CHECK:       // %bb.0:757; CHECK-NEXT:    ld4r.8b { v0, v1, v2, v3 }, [x0]758; CHECK-NEXT:    ret759; Make sure we are using the operands defined by the ABI760	%tmp2 = call %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld4r.v8i8.p0(ptr %A)761	ret %struct.__neon_int8x8x4_t  %tmp2762}763 764declare %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld2r.v8i8.p0(ptr) nounwind readonly765declare %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld3r.v8i8.p0(ptr) nounwind readonly766declare %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld4r.v8i8.p0(ptr) nounwind readonly767 768define %struct.__neon_int8x16x2_t @ld2r_16b(ptr %A) nounwind {769; CHECK-LABEL: ld2r_16b:770; CHECK:       // %bb.0:771; CHECK-NEXT:    ld2r.16b { v0, v1 }, [x0]772; CHECK-NEXT:    ret773; Make sure we are using the operands defined by the ABI774	%tmp2 = call %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2r.v16i8.p0(ptr %A)775	ret %struct.__neon_int8x16x2_t  %tmp2776}777 778define %struct.__neon_int8x16x3_t @ld3r_16b(ptr %A) nounwind {779; CHECK-LABEL: ld3r_16b:780; CHECK:       // %bb.0:781; CHECK-NEXT:    ld3r.16b { v0, v1, v2 }, [x0]782; CHECK-NEXT:    ret783; Make sure we are using the operands defined by the ABI784	%tmp2 = call %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld3r.v16i8.p0(ptr %A)785	ret %struct.__neon_int8x16x3_t  %tmp2786}787 788define %struct.__neon_int8x16x4_t @ld4r_16b(ptr %A) nounwind {789; CHECK-LABEL: ld4r_16b:790; CHECK:       // %bb.0:791; CHECK-NEXT:    ld4r.16b { v0, v1, v2, v3 }, [x0]792; CHECK-NEXT:    ret793; Make sure we are using the operands defined by the ABI794	%tmp2 = call %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld4r.v16i8.p0(ptr %A)795	ret %struct.__neon_int8x16x4_t  %tmp2796}797 798declare %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld2r.v16i8.p0(ptr) nounwind readonly799declare %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld3r.v16i8.p0(ptr) nounwind readonly800declare %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld4r.v16i8.p0(ptr) nounwind readonly801 802define %struct.__neon_int16x4x2_t @ld2r_4h(ptr %A) nounwind {803; CHECK-LABEL: ld2r_4h:804; CHECK:       // %bb.0:805; CHECK-NEXT:    ld2r.4h { v0, v1 }, [x0]806; CHECK-NEXT:    ret807; Make sure we are using the operands defined by the ABI808	%tmp2 = call %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld2r.v4i16.p0(ptr %A)809	ret %struct.__neon_int16x4x2_t  %tmp2810}811 812define %struct.__neon_int16x4x3_t @ld3r_4h(ptr %A) nounwind {813; CHECK-LABEL: ld3r_4h:814; CHECK:       // %bb.0:815; CHECK-NEXT:    ld3r.4h { v0, v1, v2 }, [x0]816; CHECK-NEXT:    ret817; Make sure we are using the operands defined by the ABI818	%tmp2 = call %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld3r.v4i16.p0(ptr %A)819	ret %struct.__neon_int16x4x3_t  %tmp2820}821 822define %struct.__neon_int16x4x4_t @ld4r_4h(ptr %A) nounwind {823; CHECK-LABEL: ld4r_4h:824; CHECK:       // %bb.0:825; CHECK-NEXT:    ld4r.4h { v0, v1, v2, v3 }, [x0]826; CHECK-NEXT:    ret827; Make sure we are using the operands defined by the ABI828	%tmp2 = call %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld4r.v4i16.p0(ptr %A)829	ret %struct.__neon_int16x4x4_t  %tmp2830}831 832declare %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld2r.v4i16.p0(ptr) nounwind readonly833declare %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld3r.v4i16.p0(ptr) nounwind readonly834declare %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld4r.v4i16.p0(ptr) nounwind readonly835 836define %struct.__neon_int16x8x2_t @ld2r_8h(ptr %A) nounwind {837; CHECK-LABEL: ld2r_8h:838; CHECK:       // %bb.0:839; CHECK-NEXT:    ld2r.8h { v0, v1 }, [x0]840; CHECK-NEXT:    ret841; Make sure we are using the operands defined by the ABI842  %tmp2 = call %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2r.v8i16.p0(ptr %A)843  ret %struct.__neon_int16x8x2_t  %tmp2844}845 846define %struct.__neon_int16x8x3_t @ld3r_8h(ptr %A) nounwind {847; CHECK-LABEL: ld3r_8h:848; CHECK:       // %bb.0:849; CHECK-NEXT:    ld3r.8h { v0, v1, v2 }, [x0]850; CHECK-NEXT:    ret851; Make sure we are using the operands defined by the ABI852  %tmp2 = call %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld3r.v8i16.p0(ptr %A)853  ret %struct.__neon_int16x8x3_t  %tmp2854}855 856define %struct.__neon_int16x8x4_t @ld4r_8h(ptr %A) nounwind {857; CHECK-LABEL: ld4r_8h:858; CHECK:       // %bb.0:859; CHECK-NEXT:    ld4r.8h { v0, v1, v2, v3 }, [x0]860; CHECK-NEXT:    ret861; Make sure we are using the operands defined by the ABI862  %tmp2 = call %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld4r.v8i16.p0(ptr %A)863  ret %struct.__neon_int16x8x4_t  %tmp2864}865 866declare %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld2r.v8i16.p0(ptr) nounwind readonly867declare %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld3r.v8i16.p0(ptr) nounwind readonly868declare %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld4r.v8i16.p0(ptr) nounwind readonly869 870define %struct.__neon_int32x2x2_t @ld2r_2s(ptr %A) nounwind {871; CHECK-LABEL: ld2r_2s:872; CHECK:       // %bb.0:873; CHECK-NEXT:    ld2r.2s { v0, v1 }, [x0]874; CHECK-NEXT:    ret875; Make sure we are using the operands defined by the ABI876	%tmp2 = call %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld2r.v2i32.p0(ptr %A)877	ret %struct.__neon_int32x2x2_t  %tmp2878}879 880define %struct.__neon_int32x2x3_t @ld3r_2s(ptr %A) nounwind {881; CHECK-LABEL: ld3r_2s:882; CHECK:       // %bb.0:883; CHECK-NEXT:    ld3r.2s { v0, v1, v2 }, [x0]884; CHECK-NEXT:    ret885; Make sure we are using the operands defined by the ABI886	%tmp2 = call %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld3r.v2i32.p0(ptr %A)887	ret %struct.__neon_int32x2x3_t  %tmp2888}889 890define %struct.__neon_int32x2x4_t @ld4r_2s(ptr %A) nounwind {891; CHECK-LABEL: ld4r_2s:892; CHECK:       // %bb.0:893; CHECK-NEXT:    ld4r.2s { v0, v1, v2, v3 }, [x0]894; CHECK-NEXT:    ret895; Make sure we are using the operands defined by the ABI896	%tmp2 = call %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld4r.v2i32.p0(ptr %A)897	ret %struct.__neon_int32x2x4_t  %tmp2898}899 900declare %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld2r.v2i32.p0(ptr) nounwind readonly901declare %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld3r.v2i32.p0(ptr) nounwind readonly902declare %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld4r.v2i32.p0(ptr) nounwind readonly903 904define %struct.__neon_int32x4x2_t @ld2r_4s(ptr %A) nounwind {905; CHECK-LABEL: ld2r_4s:906; CHECK:       // %bb.0:907; CHECK-NEXT:    ld2r.4s { v0, v1 }, [x0]908; CHECK-NEXT:    ret909; Make sure we are using the operands defined by the ABI910	%tmp2 = call %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2r.v4i32.p0(ptr %A)911	ret %struct.__neon_int32x4x2_t  %tmp2912}913 914define %struct.__neon_int32x4x3_t @ld3r_4s(ptr %A) nounwind {915; CHECK-LABEL: ld3r_4s:916; CHECK:       // %bb.0:917; CHECK-NEXT:    ld3r.4s { v0, v1, v2 }, [x0]918; CHECK-NEXT:    ret919; Make sure we are using the operands defined by the ABI920	%tmp2 = call %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld3r.v4i32.p0(ptr %A)921	ret %struct.__neon_int32x4x3_t  %tmp2922}923 924define %struct.__neon_int32x4x4_t @ld4r_4s(ptr %A) nounwind {925; CHECK-LABEL: ld4r_4s:926; CHECK:       // %bb.0:927; CHECK-NEXT:    ld4r.4s { v0, v1, v2, v3 }, [x0]928; CHECK-NEXT:    ret929; Make sure we are using the operands defined by the ABI930	%tmp2 = call %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld4r.v4i32.p0(ptr %A)931	ret %struct.__neon_int32x4x4_t  %tmp2932}933 934declare %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld2r.v4i32.p0(ptr) nounwind readonly935declare %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld3r.v4i32.p0(ptr) nounwind readonly936declare %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld4r.v4i32.p0(ptr) nounwind readonly937 938define %struct.__neon_int64x1x2_t @ld2r_1d(ptr %A) nounwind {939; CHECK-LABEL: ld2r_1d:940; CHECK:       // %bb.0:941; CHECK-NEXT:    ld2r.1d { v0, v1 }, [x0]942; CHECK-NEXT:    ret943; Make sure we are using the operands defined by the ABI944	%tmp2 = call %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld2r.v1i64.p0(ptr %A)945	ret %struct.__neon_int64x1x2_t  %tmp2946}947 948define %struct.__neon_int64x1x3_t @ld3r_1d(ptr %A) nounwind {949; CHECK-LABEL: ld3r_1d:950; CHECK:       // %bb.0:951; CHECK-NEXT:    ld3r.1d { v0, v1, v2 }, [x0]952; CHECK-NEXT:    ret953; Make sure we are using the operands defined by the ABI954	%tmp2 = call %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld3r.v1i64.p0(ptr %A)955	ret %struct.__neon_int64x1x3_t  %tmp2956}957 958define %struct.__neon_int64x1x4_t @ld4r_1d(ptr %A) nounwind {959; CHECK-LABEL: ld4r_1d:960; CHECK:       // %bb.0:961; CHECK-NEXT:    ld4r.1d { v0, v1, v2, v3 }, [x0]962; CHECK-NEXT:    ret963; Make sure we are using the operands defined by the ABI964	%tmp2 = call %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld4r.v1i64.p0(ptr %A)965	ret %struct.__neon_int64x1x4_t  %tmp2966}967 968declare %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld2r.v1i64.p0(ptr) nounwind readonly969declare %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld3r.v1i64.p0(ptr) nounwind readonly970declare %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld4r.v1i64.p0(ptr) nounwind readonly971 972define %struct.__neon_int64x2x2_t @ld2r_2d(ptr %A) nounwind {973; CHECK-LABEL: ld2r_2d:974; CHECK:       // %bb.0:975; CHECK-NEXT:    ld2r.2d { v0, v1 }, [x0]976; CHECK-NEXT:    ret977; Make sure we are using the operands defined by the ABI978	%tmp2 = call %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2r.v2i64.p0(ptr %A)979	ret %struct.__neon_int64x2x2_t  %tmp2980}981 982define %struct.__neon_int64x2x3_t @ld3r_2d(ptr %A) nounwind {983; CHECK-LABEL: ld3r_2d:984; CHECK:       // %bb.0:985; CHECK-NEXT:    ld3r.2d { v0, v1, v2 }, [x0]986; CHECK-NEXT:    ret987; Make sure we are using the operands defined by the ABI988	%tmp2 = call %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld3r.v2i64.p0(ptr %A)989	ret %struct.__neon_int64x2x3_t  %tmp2990}991 992define %struct.__neon_int64x2x4_t @ld4r_2d(ptr %A) nounwind {993; CHECK-LABEL: ld4r_2d:994; CHECK:       // %bb.0:995; CHECK-NEXT:    ld4r.2d { v0, v1, v2, v3 }, [x0]996; CHECK-NEXT:    ret997; Make sure we are using the operands defined by the ABI998	%tmp2 = call %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld4r.v2i64.p0(ptr %A)999	ret %struct.__neon_int64x2x4_t  %tmp21000}1001 1002declare %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld2r.v2i64.p0(ptr) nounwind readonly1003declare %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld3r.v2i64.p0(ptr) nounwind readonly1004declare %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld4r.v2i64.p0(ptr) nounwind readonly1005 1006define <16 x i8> @ld1_16b(<16 x i8> %V, ptr %bar) {1007; CHECK-LABEL: ld1_16b:1008; CHECK:       // %bb.0:1009; CHECK-NEXT:    ld1.b { v0 }[0], [x0]1010; CHECK-NEXT:    ret1011; Make sure we are using the operands defined by the ABI1012  %tmp1 = load i8, ptr %bar1013  %tmp2 = insertelement <16 x i8> %V, i8 %tmp1, i32 01014  ret <16 x i8> %tmp21015}1016 1017define <8 x i16> @ld1_8h(<8 x i16> %V, ptr %bar) {1018; CHECK-LABEL: ld1_8h:1019; CHECK:       // %bb.0:1020; CHECK-NEXT:    ld1.h { v0 }[0], [x0]1021; CHECK-NEXT:    ret1022; Make sure we are using the operands defined by the ABI1023  %tmp1 = load i16, ptr %bar1024  %tmp2 = insertelement <8 x i16> %V, i16 %tmp1, i32 01025  ret <8 x i16> %tmp21026}1027 1028define <4 x i32> @ld1_4s(<4 x i32> %V, ptr %bar) {1029; CHECK-LABEL: ld1_4s:1030; CHECK:       // %bb.0:1031; CHECK-NEXT:    ld1.s { v0 }[0], [x0]1032; CHECK-NEXT:    ret1033; Make sure we are using the operands defined by the ABI1034  %tmp1 = load i32, ptr %bar1035  %tmp2 = insertelement <4 x i32> %V, i32 %tmp1, i32 01036  ret <4 x i32> %tmp21037}1038 1039define <4 x float> @ld1_4s_float(<4 x float> %V, ptr %bar) {1040; CHECK-LABEL: ld1_4s_float:1041; CHECK:       // %bb.0:1042; CHECK-NEXT:    ld1.s { v0 }[0], [x0]1043; CHECK-NEXT:    ret1044; Make sure we are using the operands defined by the ABI1045  %tmp1 = load float, ptr %bar1046  %tmp2 = insertelement <4 x float> %V, float %tmp1, i32 01047  ret <4 x float> %tmp21048}1049 1050define <2 x i64> @ld1_2d(<2 x i64> %V, ptr %bar) {1051; CHECK-LABEL: ld1_2d:1052; CHECK:       // %bb.0:1053; CHECK-NEXT:    ld1.d { v0 }[0], [x0]1054; CHECK-NEXT:    ret1055; Make sure we are using the operands defined by the ABI1056  %tmp1 = load i64, ptr %bar1057  %tmp2 = insertelement <2 x i64> %V, i64 %tmp1, i32 01058  ret <2 x i64> %tmp21059}1060 1061define <2 x double> @ld1_2d_double(<2 x double> %V, ptr %bar) {1062; CHECK-LABEL: ld1_2d_double:1063; CHECK:       // %bb.0:1064; CHECK-NEXT:    ld1.d { v0 }[0], [x0]1065; CHECK-NEXT:    ret1066; Make sure we are using the operands defined by the ABI1067  %tmp1 = load double, ptr %bar1068  %tmp2 = insertelement <2 x double> %V, double %tmp1, i32 01069  ret <2 x double> %tmp21070}1071 1072define <1 x i64> @ld1_1d(ptr %p) {1073; CHECK-LABEL: ld1_1d:1074; CHECK:       // %bb.0:1075; CHECK-NEXT:    ldr d0, [x0]1076; CHECK-NEXT:    ret1077; Make sure we are using the operands defined by the ABI1078  %tmp = load <1 x i64>, ptr %p, align 81079  ret <1 x i64> %tmp1080}1081 1082define <8 x i8> @ld1_8b(<8 x i8> %V, ptr %bar) {1083; CHECK-LABEL: ld1_8b:1084; CHECK:       // %bb.0:1085; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q01086; CHECK-NEXT:    ld1.b { v0 }[0], [x0]1087; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $q01088; CHECK-NEXT:    ret1089; Make sure we are using the operands defined by the ABI1090  %tmp1 = load i8, ptr %bar1091  %tmp2 = insertelement <8 x i8> %V, i8 %tmp1, i32 01092  ret <8 x i8> %tmp21093}1094 1095define <4 x i16> @ld1_4h(<4 x i16> %V, ptr %bar) {1096; CHECK-LABEL: ld1_4h:1097; CHECK:       // %bb.0:1098; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q01099; CHECK-NEXT:    ld1.h { v0 }[0], [x0]1100; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $q01101; CHECK-NEXT:    ret1102; Make sure we are using the operands defined by the ABI1103  %tmp1 = load i16, ptr %bar1104  %tmp2 = insertelement <4 x i16> %V, i16 %tmp1, i32 01105  ret <4 x i16> %tmp21106}1107 1108define <2 x i32> @ld1_2s(<2 x i32> %V, ptr %bar) {1109; CHECK-LABEL: ld1_2s:1110; CHECK:       // %bb.0:1111; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q01112; CHECK-NEXT:    ld1.s { v0 }[0], [x0]1113; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $q01114; CHECK-NEXT:    ret1115; Make sure we are using the operands defined by the ABI1116  %tmp1 = load i32, ptr %bar1117  %tmp2 = insertelement <2 x i32> %V, i32 %tmp1, i32 01118  ret <2 x i32> %tmp21119}1120 1121define <2 x float> @ld1_2s_float(<2 x float> %V, ptr %bar) {1122; CHECK-LABEL: ld1_2s_float:1123; CHECK:       // %bb.0:1124; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q01125; CHECK-NEXT:    ld1.s { v0 }[0], [x0]1126; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $q01127; CHECK-NEXT:    ret1128; Make sure we are using the operands defined by the ABI1129  %tmp1 = load float, ptr %bar1130  %tmp2 = insertelement <2 x float> %V, float %tmp1, i32 01131  ret <2 x float> %tmp21132}1133 1134 1135; Add rdar://13098923 test case: vld1_dup_u32 doesn't generate ld1r.2s1136define void @ld1r_2s_from_dup(ptr nocapture %a, ptr nocapture %b, ptr nocapture %diff) nounwind ssp {1137; CHECK-SD-LABEL: ld1r_2s_from_dup:1138; CHECK-SD:       // %bb.0: // %entry1139; CHECK-SD-NEXT:    ldr s0, [x0]1140; CHECK-SD-NEXT:    ldr s1, [x1]1141; CHECK-SD-NEXT:    usubl.8h v0, v0, v11142; CHECK-SD-NEXT:    str d0, [x2]1143; CHECK-SD-NEXT:    ret1144;1145; CHECK-GI-LABEL: ld1r_2s_from_dup:1146; CHECK-GI:       // %bb.0: // %entry1147; CHECK-GI-NEXT:    ld1r.2s { v0 }, [x0]1148; CHECK-GI-NEXT:    ld1r.2s { v1 }, [x1]1149; CHECK-GI-NEXT:    usubl.8h v0, v0, v11150; CHECK-GI-NEXT:    str d0, [x2]1151; CHECK-GI-NEXT:    ret1152entry:1153  %tmp1 = load i32, ptr %a, align 41154  %tmp2 = insertelement <2 x i32> undef, i32 %tmp1, i32 01155  %lane = shufflevector <2 x i32> %tmp2, <2 x i32> undef, <2 x i32> zeroinitializer1156  %tmp3 = bitcast <2 x i32> %lane to <8 x i8>1157  %tmp5 = load i32, ptr %b, align 41158  %tmp6 = insertelement <2 x i32> undef, i32 %tmp5, i32 01159  %lane1 = shufflevector <2 x i32> %tmp6, <2 x i32> undef, <2 x i32> zeroinitializer1160  %tmp7 = bitcast <2 x i32> %lane1 to <8 x i8>1161  %vmovl.i.i = zext <8 x i8> %tmp3 to <8 x i16>1162  %vmovl.i4.i = zext <8 x i8> %tmp7 to <8 x i16>1163  %sub.i = sub <8 x i16> %vmovl.i.i, %vmovl.i4.i1164  %tmp8 = bitcast <8 x i16> %sub.i to <2 x i64>1165  %shuffle.i = shufflevector <2 x i64> %tmp8, <2 x i64> undef, <1 x i32> zeroinitializer1166  %tmp9 = bitcast <1 x i64> %shuffle.i to <4 x i16>1167  store <4 x i16> %tmp9, ptr %diff, align 81168  ret void1169}1170 1171; Tests for rdar://11947069: vld1_dup_* and vld1q_dup_* code gen is suboptimal1172define <4 x float> @ld1r_4s_float(ptr nocapture %x) {1173; CHECK-LABEL: ld1r_4s_float:1174; CHECK:       // %bb.0: // %entry1175; CHECK-NEXT:    ld1r.4s { v0 }, [x0]1176; CHECK-NEXT:    ret1177entry:1178; Make sure we are using the operands defined by the ABI1179  %tmp = load float, ptr %x, align 41180  %tmp1 = insertelement <4 x float> undef, float %tmp, i32 01181  %tmp2 = insertelement <4 x float> %tmp1, float %tmp, i32 11182  %tmp3 = insertelement <4 x float> %tmp2, float %tmp, i32 21183  %tmp4 = insertelement <4 x float> %tmp3, float %tmp, i32 31184  ret <4 x float> %tmp41185}1186 1187define <2 x float> @ld1r_2s_float(ptr nocapture %x) {1188; CHECK-LABEL: ld1r_2s_float:1189; CHECK:       // %bb.0: // %entry1190; CHECK-NEXT:    ld1r.2s { v0 }, [x0]1191; CHECK-NEXT:    ret1192entry:1193; Make sure we are using the operands defined by the ABI1194  %tmp = load float, ptr %x, align 41195  %tmp1 = insertelement <2 x float> undef, float %tmp, i32 01196  %tmp2 = insertelement <2 x float> %tmp1, float %tmp, i32 11197  ret <2 x float> %tmp21198}1199 1200define <2 x double> @ld1r_2d_double(ptr nocapture %x) {1201; CHECK-LABEL: ld1r_2d_double:1202; CHECK:       // %bb.0: // %entry1203; CHECK-NEXT:    ld1r.2d { v0 }, [x0]1204; CHECK-NEXT:    ret1205entry:1206; Make sure we are using the operands defined by the ABI1207  %tmp = load double, ptr %x, align 41208  %tmp1 = insertelement <2 x double> undef, double %tmp, i32 01209  %tmp2 = insertelement <2 x double> %tmp1, double %tmp, i32 11210  ret <2 x double> %tmp21211}1212 1213define <1 x double> @ld1r_1d_double(ptr nocapture %x) {1214; CHECK-LABEL: ld1r_1d_double:1215; CHECK:       // %bb.0: // %entry1216; CHECK-NEXT:    ldr d0, [x0]1217; CHECK-NEXT:    ret1218entry:1219; Make sure we are using the operands defined by the ABI1220  %tmp = load double, ptr %x, align 41221  %tmp1 = insertelement <1 x double> undef, double %tmp, i32 01222  ret <1 x double> %tmp11223}1224 1225define <4 x float> @ld1r_4s_float_shuff(ptr nocapture %x) {1226; CHECK-LABEL: ld1r_4s_float_shuff:1227; CHECK:       // %bb.0: // %entry1228; CHECK-NEXT:    ld1r.4s { v0 }, [x0]1229; CHECK-NEXT:    ret1230entry:1231; Make sure we are using the operands defined by the ABI1232  %tmp = load float, ptr %x, align 41233  %tmp1 = insertelement <4 x float> undef, float %tmp, i32 01234  %lane = shufflevector <4 x float> %tmp1, <4 x float> undef, <4 x i32> zeroinitializer1235  ret <4 x float> %lane1236}1237 1238define <2 x float> @ld1r_2s_float_shuff(ptr nocapture %x) {1239; CHECK-LABEL: ld1r_2s_float_shuff:1240; CHECK:       // %bb.0: // %entry1241; CHECK-NEXT:    ld1r.2s { v0 }, [x0]1242; CHECK-NEXT:    ret1243entry:1244; Make sure we are using the operands defined by the ABI1245  %tmp = load float, ptr %x, align 41246  %tmp1 = insertelement <2 x float> undef, float %tmp, i32 01247  %lane = shufflevector <2 x float> %tmp1, <2 x float> undef, <2 x i32> zeroinitializer1248  ret <2 x float> %lane1249}1250 1251define <2 x double> @ld1r_2d_double_shuff(ptr nocapture %x) {1252; CHECK-LABEL: ld1r_2d_double_shuff:1253; CHECK:       // %bb.0: // %entry1254; CHECK-NEXT:    ld1r.2d { v0 }, [x0]1255; CHECK-NEXT:    ret1256entry:1257; Make sure we are using the operands defined by the ABI1258  %tmp = load double, ptr %x, align 41259  %tmp1 = insertelement <2 x double> undef, double %tmp, i32 01260  %lane = shufflevector <2 x double> %tmp1, <2 x double> undef, <2 x i32> zeroinitializer1261  ret <2 x double> %lane1262}1263 1264define <1 x double> @ld1r_1d_double_shuff(ptr nocapture %x) {1265; CHECK-LABEL: ld1r_1d_double_shuff:1266; CHECK:       // %bb.0: // %entry1267; CHECK-NEXT:    ldr d0, [x0]1268; CHECK-NEXT:    ret1269entry:1270; Make sure we are using the operands defined by the ABI1271  %tmp = load double, ptr %x, align 41272  %tmp1 = insertelement <1 x double> undef, double %tmp, i32 01273  %lane = shufflevector <1 x double> %tmp1, <1 x double> undef, <1 x i32> zeroinitializer1274  ret <1 x double> %lane1275}1276 1277%struct.__neon_float32x2x2_t = type { <2 x float>,  <2 x float> }1278%struct.__neon_float32x2x3_t = type { <2 x float>,  <2 x float>,  <2 x float> }1279%struct.__neon_float32x2x4_t = type { <2 x float>,  <2 x float>, <2 x float>,  <2 x float> }1280 1281declare %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr) nounwind readonly1282declare %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr) nounwind readonly1283declare %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr) nounwind readonly1284declare %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld1x2.v2f32.p0(ptr) nounwind readonly1285declare %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr) nounwind readonly1286declare %struct.__neon_float64x1x2_t @llvm.aarch64.neon.ld1x2.v1f64.p0(ptr) nounwind readonly1287 1288define %struct.__neon_int8x8x2_t @ld1_x2_v8i8(ptr %addr) {1289; CHECK-LABEL: ld1_x2_v8i8:1290; CHECK:       // %bb.0:1291; CHECK-NEXT:    ld1.8b { v0, v1 }, [x0]1292; CHECK-NEXT:    ret1293  %val = call %struct.__neon_int8x8x2_t @llvm.aarch64.neon.ld1x2.v8i8.p0(ptr %addr)1294  ret %struct.__neon_int8x8x2_t %val1295}1296 1297define %struct.__neon_int16x4x2_t @ld1_x2_v4i16(ptr %addr) {1298; CHECK-LABEL: ld1_x2_v4i16:1299; CHECK:       // %bb.0:1300; CHECK-NEXT:    ld1.4h { v0, v1 }, [x0]1301; CHECK-NEXT:    ret1302  %val = call %struct.__neon_int16x4x2_t @llvm.aarch64.neon.ld1x2.v4i16.p0(ptr %addr)1303  ret %struct.__neon_int16x4x2_t %val1304}1305 1306define %struct.__neon_int32x2x2_t @ld1_x2_v2i32(ptr %addr) {1307; CHECK-LABEL: ld1_x2_v2i32:1308; CHECK:       // %bb.0:1309; CHECK-NEXT:    ld1.2s { v0, v1 }, [x0]1310; CHECK-NEXT:    ret1311  %val = call %struct.__neon_int32x2x2_t @llvm.aarch64.neon.ld1x2.v2i32.p0(ptr %addr)1312  ret %struct.__neon_int32x2x2_t %val1313}1314 1315define %struct.__neon_float32x2x2_t @ld1_x2_v2f32(ptr %addr) {1316; CHECK-LABEL: ld1_x2_v2f32:1317; CHECK:       // %bb.0:1318; CHECK-NEXT:    ld1.2s { v0, v1 }, [x0]1319; CHECK-NEXT:    ret1320  %val = call %struct.__neon_float32x2x2_t @llvm.aarch64.neon.ld1x2.v2f32.p0(ptr %addr)1321  ret %struct.__neon_float32x2x2_t %val1322}1323 1324define %struct.__neon_int64x1x2_t @ld1_x2_v1i64(ptr %addr) {1325; CHECK-LABEL: ld1_x2_v1i64:1326; CHECK:       // %bb.0:1327; CHECK-NEXT:    ld1.1d { v0, v1 }, [x0]1328; CHECK-NEXT:    ret1329  %val = call %struct.__neon_int64x1x2_t @llvm.aarch64.neon.ld1x2.v1i64.p0(ptr %addr)1330  ret %struct.__neon_int64x1x2_t %val1331}1332 1333define %struct.__neon_float64x1x2_t @ld1_x2_v1f64(ptr %addr) {1334; CHECK-LABEL: ld1_x2_v1f64:1335; CHECK:       // %bb.0:1336; CHECK-NEXT:    ld1.1d { v0, v1 }, [x0]1337; CHECK-NEXT:    ret1338  %val = call %struct.__neon_float64x1x2_t @llvm.aarch64.neon.ld1x2.v1f64.p0(ptr %addr)1339  ret %struct.__neon_float64x1x2_t %val1340}1341 1342 1343%struct.__neon_float32x4x2_t = type { <4 x float>,  <4 x float> }1344%struct.__neon_float32x4x3_t = type { <4 x float>,  <4 x float>,  <4 x float> }1345%struct.__neon_float32x4x4_t = type { <4 x float>,  <4 x float>, <4 x float>,  <4 x float> }1346 1347%struct.__neon_float64x2x2_t = type { <2 x double>,  <2 x double> }1348%struct.__neon_float64x2x3_t = type { <2 x double>,  <2 x double>,  <2 x double> }1349%struct.__neon_float64x2x4_t = type { <2 x double>,  <2 x double>, <2 x double>,  <2 x double> }1350 1351declare %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr) nounwind readonly1352declare %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr) nounwind readonly1353declare %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr) nounwind readonly1354declare %struct.__neon_float32x4x2_t @llvm.aarch64.neon.ld1x2.v4f32.p0(ptr) nounwind readonly1355declare %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr) nounwind readonly1356declare %struct.__neon_float64x2x2_t @llvm.aarch64.neon.ld1x2.v2f64.p0(ptr) nounwind readonly1357 1358define %struct.__neon_int8x16x2_t @ld1_x2_v16i8(ptr %addr) {1359; CHECK-LABEL: ld1_x2_v16i8:1360; CHECK:       // %bb.0:1361; CHECK-NEXT:    ld1.16b { v0, v1 }, [x0]1362; CHECK-NEXT:    ret1363  %val = call %struct.__neon_int8x16x2_t @llvm.aarch64.neon.ld1x2.v16i8.p0(ptr %addr)1364  ret %struct.__neon_int8x16x2_t %val1365}1366 1367define %struct.__neon_int16x8x2_t @ld1_x2_v8i16(ptr %addr) {1368; CHECK-LABEL: ld1_x2_v8i16:1369; CHECK:       // %bb.0:1370; CHECK-NEXT:    ld1.8h { v0, v1 }, [x0]1371; CHECK-NEXT:    ret1372  %val = call %struct.__neon_int16x8x2_t @llvm.aarch64.neon.ld1x2.v8i16.p0(ptr %addr)1373  ret %struct.__neon_int16x8x2_t %val1374}1375 1376define %struct.__neon_int32x4x2_t @ld1_x2_v4i32(ptr %addr) {1377; CHECK-LABEL: ld1_x2_v4i32:1378; CHECK:       // %bb.0:1379; CHECK-NEXT:    ld1.4s { v0, v1 }, [x0]1380; CHECK-NEXT:    ret1381  %val = call %struct.__neon_int32x4x2_t @llvm.aarch64.neon.ld1x2.v4i32.p0(ptr %addr)1382  ret %struct.__neon_int32x4x2_t %val1383}1384 1385define %struct.__neon_float32x4x2_t @ld1_x2_v4f32(ptr %addr) {1386; CHECK-LABEL: ld1_x2_v4f32:1387; CHECK:       // %bb.0:1388; CHECK-NEXT:    ld1.4s { v0, v1 }, [x0]1389; CHECK-NEXT:    ret1390  %val = call %struct.__neon_float32x4x2_t @llvm.aarch64.neon.ld1x2.v4f32.p0(ptr %addr)1391  ret %struct.__neon_float32x4x2_t %val1392}1393 1394define %struct.__neon_int64x2x2_t @ld1_x2_v2i64(ptr %addr) {1395; CHECK-LABEL: ld1_x2_v2i64:1396; CHECK:       // %bb.0:1397; CHECK-NEXT:    ld1.2d { v0, v1 }, [x0]1398; CHECK-NEXT:    ret1399  %val = call %struct.__neon_int64x2x2_t @llvm.aarch64.neon.ld1x2.v2i64.p0(ptr %addr)1400  ret %struct.__neon_int64x2x2_t %val1401}1402 1403define %struct.__neon_float64x2x2_t @ld1_x2_v2f64(ptr %addr) {1404; CHECK-LABEL: ld1_x2_v2f64:1405; CHECK:       // %bb.0:1406; CHECK-NEXT:    ld1.2d { v0, v1 }, [x0]1407; CHECK-NEXT:    ret1408  %val = call %struct.__neon_float64x2x2_t @llvm.aarch64.neon.ld1x2.v2f64.p0(ptr %addr)1409  ret %struct.__neon_float64x2x2_t %val1410}1411 1412declare %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr) nounwind readonly1413declare %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr) nounwind readonly1414declare %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr) nounwind readonly1415declare %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld1x3.v2f32.p0(ptr) nounwind readonly1416declare %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr) nounwind readonly1417declare %struct.__neon_float64x1x3_t @llvm.aarch64.neon.ld1x3.v1f64.p0(ptr) nounwind readonly1418 1419define %struct.__neon_int8x8x3_t @ld1_x3_v8i8(ptr %addr) {1420; CHECK-LABEL: ld1_x3_v8i8:1421; CHECK:       // %bb.0:1422; CHECK-NEXT:    ld1.8b { v0, v1, v2 }, [x0]1423; CHECK-NEXT:    ret1424  %val = call %struct.__neon_int8x8x3_t @llvm.aarch64.neon.ld1x3.v8i8.p0(ptr %addr)1425  ret %struct.__neon_int8x8x3_t %val1426}1427 1428define %struct.__neon_int16x4x3_t @ld1_x3_v4i16(ptr %addr) {1429; CHECK-LABEL: ld1_x3_v4i16:1430; CHECK:       // %bb.0:1431; CHECK-NEXT:    ld1.4h { v0, v1, v2 }, [x0]1432; CHECK-NEXT:    ret1433  %val = call %struct.__neon_int16x4x3_t @llvm.aarch64.neon.ld1x3.v4i16.p0(ptr %addr)1434  ret %struct.__neon_int16x4x3_t %val1435}1436 1437define %struct.__neon_int32x2x3_t @ld1_x3_v2i32(ptr %addr) {1438; CHECK-LABEL: ld1_x3_v2i32:1439; CHECK:       // %bb.0:1440; CHECK-NEXT:    ld1.2s { v0, v1, v2 }, [x0]1441; CHECK-NEXT:    ret1442  %val = call %struct.__neon_int32x2x3_t @llvm.aarch64.neon.ld1x3.v2i32.p0(ptr %addr)1443  ret %struct.__neon_int32x2x3_t %val1444}1445 1446define %struct.__neon_float32x2x3_t @ld1_x3_v2f32(ptr %addr) {1447; CHECK-LABEL: ld1_x3_v2f32:1448; CHECK:       // %bb.0:1449; CHECK-NEXT:    ld1.2s { v0, v1, v2 }, [x0]1450; CHECK-NEXT:    ret1451  %val = call %struct.__neon_float32x2x3_t @llvm.aarch64.neon.ld1x3.v2f32.p0(ptr %addr)1452  ret %struct.__neon_float32x2x3_t %val1453}1454 1455define %struct.__neon_int64x1x3_t @ld1_x3_v1i64(ptr %addr) {1456; CHECK-LABEL: ld1_x3_v1i64:1457; CHECK:       // %bb.0:1458; CHECK-NEXT:    ld1.1d { v0, v1, v2 }, [x0]1459; CHECK-NEXT:    ret1460  %val = call %struct.__neon_int64x1x3_t @llvm.aarch64.neon.ld1x3.v1i64.p0(ptr %addr)1461  ret %struct.__neon_int64x1x3_t %val1462}1463 1464define %struct.__neon_float64x1x3_t @ld1_x3_v1f64(ptr %addr) {1465; CHECK-LABEL: ld1_x3_v1f64:1466; CHECK:       // %bb.0:1467; CHECK-NEXT:    ld1.1d { v0, v1, v2 }, [x0]1468; CHECK-NEXT:    ret1469  %val = call %struct.__neon_float64x1x3_t @llvm.aarch64.neon.ld1x3.v1f64.p0(ptr %addr)1470  ret %struct.__neon_float64x1x3_t %val1471}1472 1473declare %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr) nounwind readonly1474declare %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr) nounwind readonly1475declare %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr) nounwind readonly1476declare %struct.__neon_float32x4x3_t @llvm.aarch64.neon.ld1x3.v4f32.p0(ptr) nounwind readonly1477declare %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr) nounwind readonly1478declare %struct.__neon_float64x2x3_t @llvm.aarch64.neon.ld1x3.v2f64.p0(ptr) nounwind readonly1479 1480define %struct.__neon_int8x16x3_t @ld1_x3_v16i8(ptr %addr) {1481; CHECK-LABEL: ld1_x3_v16i8:1482; CHECK:       // %bb.0:1483; CHECK-NEXT:    ld1.16b { v0, v1, v2 }, [x0]1484; CHECK-NEXT:    ret1485  %val = call %struct.__neon_int8x16x3_t @llvm.aarch64.neon.ld1x3.v16i8.p0(ptr %addr)1486  ret %struct.__neon_int8x16x3_t %val1487}1488 1489define %struct.__neon_int16x8x3_t @ld1_x3_v8i16(ptr %addr) {1490; CHECK-LABEL: ld1_x3_v8i16:1491; CHECK:       // %bb.0:1492; CHECK-NEXT:    ld1.8h { v0, v1, v2 }, [x0]1493; CHECK-NEXT:    ret1494  %val = call %struct.__neon_int16x8x3_t @llvm.aarch64.neon.ld1x3.v8i16.p0(ptr %addr)1495  ret %struct.__neon_int16x8x3_t %val1496}1497 1498define %struct.__neon_int32x4x3_t @ld1_x3_v4i32(ptr %addr) {1499; CHECK-LABEL: ld1_x3_v4i32:1500; CHECK:       // %bb.0:1501; CHECK-NEXT:    ld1.4s { v0, v1, v2 }, [x0]1502; CHECK-NEXT:    ret1503  %val = call %struct.__neon_int32x4x3_t @llvm.aarch64.neon.ld1x3.v4i32.p0(ptr %addr)1504  ret %struct.__neon_int32x4x3_t %val1505}1506 1507define %struct.__neon_float32x4x3_t @ld1_x3_v4f32(ptr %addr) {1508; CHECK-LABEL: ld1_x3_v4f32:1509; CHECK:       // %bb.0:1510; CHECK-NEXT:    ld1.4s { v0, v1, v2 }, [x0]1511; CHECK-NEXT:    ret1512  %val = call %struct.__neon_float32x4x3_t @llvm.aarch64.neon.ld1x3.v4f32.p0(ptr %addr)1513  ret %struct.__neon_float32x4x3_t %val1514}1515 1516define %struct.__neon_int64x2x3_t @ld1_x3_v2i64(ptr %addr) {1517; CHECK-LABEL: ld1_x3_v2i64:1518; CHECK:       // %bb.0:1519; CHECK-NEXT:    ld1.2d { v0, v1, v2 }, [x0]1520; CHECK-NEXT:    ret1521  %val = call %struct.__neon_int64x2x3_t @llvm.aarch64.neon.ld1x3.v2i64.p0(ptr %addr)1522  ret %struct.__neon_int64x2x3_t %val1523}1524 1525define %struct.__neon_float64x2x3_t @ld1_x3_v2f64(ptr %addr) {1526; CHECK-LABEL: ld1_x3_v2f64:1527; CHECK:       // %bb.0:1528; CHECK-NEXT:    ld1.2d { v0, v1, v2 }, [x0]1529; CHECK-NEXT:    ret1530  %val = call %struct.__neon_float64x2x3_t @llvm.aarch64.neon.ld1x3.v2f64.p0(ptr %addr)1531  ret %struct.__neon_float64x2x3_t %val1532}1533 1534declare %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr) nounwind readonly1535declare %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr) nounwind readonly1536declare %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr) nounwind readonly1537declare %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld1x4.v2f32.p0(ptr) nounwind readonly1538declare %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr) nounwind readonly1539declare %struct.__neon_float64x1x4_t @llvm.aarch64.neon.ld1x4.v1f64.p0(ptr) nounwind readonly1540 1541define %struct.__neon_int8x8x4_t @ld1_x4_v8i8(ptr %addr) {1542; CHECK-LABEL: ld1_x4_v8i8:1543; CHECK:       // %bb.0:1544; CHECK-NEXT:    ld1.8b { v0, v1, v2, v3 }, [x0]1545; CHECK-NEXT:    ret1546  %val = call %struct.__neon_int8x8x4_t @llvm.aarch64.neon.ld1x4.v8i8.p0(ptr %addr)1547  ret %struct.__neon_int8x8x4_t %val1548}1549 1550define %struct.__neon_int16x4x4_t @ld1_x4_v4i16(ptr %addr) {1551; CHECK-LABEL: ld1_x4_v4i16:1552; CHECK:       // %bb.0:1553; CHECK-NEXT:    ld1.4h { v0, v1, v2, v3 }, [x0]1554; CHECK-NEXT:    ret1555  %val = call %struct.__neon_int16x4x4_t @llvm.aarch64.neon.ld1x4.v4i16.p0(ptr %addr)1556  ret %struct.__neon_int16x4x4_t %val1557}1558 1559define %struct.__neon_int32x2x4_t @ld1_x4_v2i32(ptr %addr) {1560; CHECK-LABEL: ld1_x4_v2i32:1561; CHECK:       // %bb.0:1562; CHECK-NEXT:    ld1.2s { v0, v1, v2, v3 }, [x0]1563; CHECK-NEXT:    ret1564  %val = call %struct.__neon_int32x2x4_t @llvm.aarch64.neon.ld1x4.v2i32.p0(ptr %addr)1565  ret %struct.__neon_int32x2x4_t %val1566}1567 1568define %struct.__neon_float32x2x4_t @ld1_x4_v2f32(ptr %addr) {1569; CHECK-LABEL: ld1_x4_v2f32:1570; CHECK:       // %bb.0:1571; CHECK-NEXT:    ld1.2s { v0, v1, v2, v3 }, [x0]1572; CHECK-NEXT:    ret1573  %val = call %struct.__neon_float32x2x4_t @llvm.aarch64.neon.ld1x4.v2f32.p0(ptr %addr)1574  ret %struct.__neon_float32x2x4_t %val1575}1576 1577define %struct.__neon_int64x1x4_t @ld1_x4_v1i64(ptr %addr) {1578; CHECK-LABEL: ld1_x4_v1i64:1579; CHECK:       // %bb.0:1580; CHECK-NEXT:    ld1.1d { v0, v1, v2, v3 }, [x0]1581; CHECK-NEXT:    ret1582  %val = call %struct.__neon_int64x1x4_t @llvm.aarch64.neon.ld1x4.v1i64.p0(ptr %addr)1583  ret %struct.__neon_int64x1x4_t %val1584}1585 1586define %struct.__neon_float64x1x4_t @ld1_x4_v1f64(ptr %addr) {1587; CHECK-LABEL: ld1_x4_v1f64:1588; CHECK:       // %bb.0:1589; CHECK-NEXT:    ld1.1d { v0, v1, v2, v3 }, [x0]1590; CHECK-NEXT:    ret1591  %val = call %struct.__neon_float64x1x4_t @llvm.aarch64.neon.ld1x4.v1f64.p0(ptr %addr)1592  ret %struct.__neon_float64x1x4_t %val1593}1594 1595declare %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr) nounwind readonly1596declare %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr) nounwind readonly1597declare %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr) nounwind readonly1598declare %struct.__neon_float32x4x4_t @llvm.aarch64.neon.ld1x4.v4f32.p0(ptr) nounwind readonly1599declare %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr) nounwind readonly1600declare %struct.__neon_float64x2x4_t @llvm.aarch64.neon.ld1x4.v2f64.p0(ptr) nounwind readonly1601 1602define %struct.__neon_int8x16x4_t @ld1_x4_v16i8(ptr %addr) {1603; CHECK-LABEL: ld1_x4_v16i8:1604; CHECK:       // %bb.0:1605; CHECK-NEXT:    ld1.16b { v0, v1, v2, v3 }, [x0]1606; CHECK-NEXT:    ret1607  %val = call %struct.__neon_int8x16x4_t @llvm.aarch64.neon.ld1x4.v16i8.p0(ptr %addr)1608  ret %struct.__neon_int8x16x4_t %val1609}1610 1611define %struct.__neon_int16x8x4_t @ld1_x4_v8i16(ptr %addr) {1612; CHECK-LABEL: ld1_x4_v8i16:1613; CHECK:       // %bb.0:1614; CHECK-NEXT:    ld1.8h { v0, v1, v2, v3 }, [x0]1615; CHECK-NEXT:    ret1616  %val = call %struct.__neon_int16x8x4_t @llvm.aarch64.neon.ld1x4.v8i16.p0(ptr %addr)1617  ret %struct.__neon_int16x8x4_t %val1618}1619 1620define %struct.__neon_int32x4x4_t @ld1_x4_v4i32(ptr %addr) {1621; CHECK-LABEL: ld1_x4_v4i32:1622; CHECK:       // %bb.0:1623; CHECK-NEXT:    ld1.4s { v0, v1, v2, v3 }, [x0]1624; CHECK-NEXT:    ret1625  %val = call %struct.__neon_int32x4x4_t @llvm.aarch64.neon.ld1x4.v4i32.p0(ptr %addr)1626  ret %struct.__neon_int32x4x4_t %val1627}1628 1629define %struct.__neon_float32x4x4_t @ld1_x4_v4f32(ptr %addr) {1630; CHECK-LABEL: ld1_x4_v4f32:1631; CHECK:       // %bb.0:1632; CHECK-NEXT:    ld1.4s { v0, v1, v2, v3 }, [x0]1633; CHECK-NEXT:    ret1634  %val = call %struct.__neon_float32x4x4_t @llvm.aarch64.neon.ld1x4.v4f32.p0(ptr %addr)1635  ret %struct.__neon_float32x4x4_t %val1636}1637 1638define %struct.__neon_int64x2x4_t @ld1_x4_v2i64(ptr %addr) {1639; CHECK-LABEL: ld1_x4_v2i64:1640; CHECK:       // %bb.0:1641; CHECK-NEXT:    ld1.2d { v0, v1, v2, v3 }, [x0]1642; CHECK-NEXT:    ret1643  %val = call %struct.__neon_int64x2x4_t @llvm.aarch64.neon.ld1x4.v2i64.p0(ptr %addr)1644  ret %struct.__neon_int64x2x4_t %val1645}1646 1647define %struct.__neon_float64x2x4_t @ld1_x4_v2f64(ptr %addr) {1648; CHECK-LABEL: ld1_x4_v2f64:1649; CHECK:       // %bb.0:1650; CHECK-NEXT:    ld1.2d { v0, v1, v2, v3 }, [x0]1651; CHECK-NEXT:    ret1652  %val = call %struct.__neon_float64x2x4_t @llvm.aarch64.neon.ld1x4.v2f64.p0(ptr %addr)1653  ret %struct.__neon_float64x2x4_t %val1654}1655 1656define <8 x i8> @dup_ld1_from_stack(ptr %__ret) {1657; CHECK-LABEL: dup_ld1_from_stack:1658; CHECK:       // %bb.0: // %entry1659; CHECK-NEXT:    sub sp, sp, #161660; CHECK-NEXT:    .cfi_def_cfa_offset 161661; CHECK-NEXT:    add x8, sp, #151662; CHECK-NEXT:    ld1r.8b { v0 }, [x8]1663; CHECK-NEXT:    add sp, sp, #161664; CHECK-NEXT:    ret1665entry:1666  %item = alloca i8, align 11667  %0 = load i8, ptr %item, align 11668  %1 = insertelement <8 x i8> poison, i8 %0, i32 01669  %lane = shufflevector <8 x i8> %1, <8 x i8> %1, <8 x i32> zeroinitializer1670  ret <8 x i8> %lane1671}1672