<div dir="ltr">Hi Eli,<div><br></div><div>Looks like this isn't enough to get <arm_neon.h> to work properly with -flax-vector-conversions=integer across all subtargets. With this patch applied, the following tests fail with -flax-vector-conversions=integer:</div><div><br></div><div>    Clang :: CodeGen/aarch64-neon-fp16fml.c<br>    Clang :: CodeGen/aarch64-neon-intrinsics.c<br>    Clang :: CodeGen/aarch64-neon-ldst-one.c<br>    Clang :: CodeGen/aarch64-v8.2a-neon-intrinsics.c<br>    Clang :: CodeGen/arm-neon-vst.c<br>    Clang :: CodeGen/arm64-vrnd.c<br>    Clang :: CodeGen/arm_neon_intrinsics.c<br></div><div><br></div><div>For example, with -target-feature +v8.2a -target-feature +neon -target-feature +fp16fml we get:</div><div><br></div><div>.../build/lib/clang/10.0.0/include/arm_neon.h:37147:55: error: passing 'int8x16_t' (vector of 16 'int8_t' values) to parameter of incompatible type '__attribute__((__vector_size__(4 * sizeof(float)))) float' (vector of 4 'float' values)<br>  __ret = (float32x4_t) __builtin_neon_vfmlalq_high_v((int8x16_t)__p0, (int8x16_t)__p1, (int8x16_t)__p2, 41);<br>                                                      ^~~~~~~~~~~~~~~<br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 9 Oct 2019 at 10:55, Eli Friedman via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: efriedma<br>
Date: Wed Oct  9 10:57:59 2019<br>
New Revision: 374191<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=374191&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=374191&view=rev</a><br>
Log:<br>
[ARM] Fix arm_neon.h with -flax-vector-conversions=none<br>
<br>
Really, we were already 99% of the way there; just needed a couple minor<br>
fixes that affected 64-bit-only builtins.  Based on D61717.<br>
<br>
Note that the change to builtin_str changes the type of a few<br>
__builtin_neon_* intrinsics that had the "wrong" type.<br>
<br>
Fixes <a href="https://bugs.llvm.org/show_bug.cgi?id=43341" rel="noreferrer" target="_blank">https://bugs.llvm.org/show_bug.cgi?id=43341</a><br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D68683" rel="noreferrer" target="_blank">https://reviews.llvm.org/D68683</a><br>
<br>
<br>
Modified:<br>
    cfe/trunk/test/CodeGen/aarch64-neon-2velem.c<br>
    cfe/trunk/test/CodeGen/aarch64-neon-intrinsics.c<br>
    cfe/trunk/test/CodeGen/aarch64-neon-scalar-copy.c<br>
    cfe/trunk/test/CodeGen/aarch64-neon-scalar-x-indexed-elem.c<br>
    cfe/trunk/test/CodeGen/aarch64-neon-vget.c<br>
    cfe/trunk/test/CodeGen/aarch64-poly64.c<br>
    cfe/trunk/test/CodeGen/aarch64-v8.2a-neon-intrinsics.c<br>
    cfe/trunk/test/CodeGen/arm64-lanes.c<br>
    cfe/trunk/test/CodeGen/arm64_vcopy.c<br>
    cfe/trunk/test/CodeGen/arm_neon_intrinsics.c<br>
    cfe/trunk/test/Headers/arm-neon-header.c<br>
    cfe/trunk/utils/TableGen/NeonEmitter.cpp<br>
<br>
Modified: cfe/trunk/test/CodeGen/aarch64-neon-2velem.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-neon-2velem.c?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-neon-2velem.c?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/aarch64-neon-2velem.c (original)<br>
+++ cfe/trunk/test/CodeGen/aarch64-neon-2velem.c Wed Oct  9 10:57:59 2019<br>
@@ -451,9 +451,7 @@ float64x2_t test_vfmsq_laneq_f64(float64<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vfmas_laneq_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %v to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float><br>
-// CHECK:   [[EXTRACT:%.*]] = extractelement <4 x float> [[TMP1]], i32 3<br>
+// CHECK:   [[EXTRACT:%.*]] = extractelement <4 x float> %v, i32 3<br>
 // CHECK:   [[TMP2:%.*]] = call float @llvm.fma.f32(float %b, float [[EXTRACT]], float %a)<br>
 // CHECK:   ret float [[TMP2]]<br>
 float32_t test_vfmas_laneq_f32(float32_t a, float32_t b, float32x4_t v) {<br>
@@ -462,9 +460,7 @@ float32_t test_vfmas_laneq_f32(float32_t<br>
<br>
 // CHECK-LABEL: @test_vfmsd_lane_f64(<br>
 // CHECK:   [[SUB:%.*]] = fsub double -0.000000e+00, %b<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %v to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double><br>
-// CHECK:   [[EXTRACT:%.*]] = extractelement <1 x double> [[TMP1]], i32 0<br>
+// CHECK:   [[EXTRACT:%.*]] = extractelement <1 x double> %v, i32 0<br>
 // CHECK:   [[TMP2:%.*]] = call double @llvm.fma.f64(double [[SUB]], double [[EXTRACT]], double %a)<br>
 // CHECK:   ret double [[TMP2]]<br>
 float64_t test_vfmsd_lane_f64(float64_t a, float64_t b, float64x1_t v) {<br>
@@ -473,9 +469,7 @@ float64_t test_vfmsd_lane_f64(float64_t<br>
<br>
 // CHECK-LABEL: @test_vfmss_laneq_f32(<br>
 // CHECK:   [[SUB:%.*]] = fsub float -0.000000e+00, %b<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %v to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float><br>
-// CHECK:   [[EXTRACT:%.*]] = extractelement <4 x float> [[TMP1]], i32 3<br>
+// CHECK:   [[EXTRACT:%.*]] = extractelement <4 x float> %v, i32 3<br>
 // CHECK:   [[TMP2:%.*]] = call float @llvm.fma.f32(float [[SUB]], float [[EXTRACT]], float %a)<br>
 // CHECK:   ret float [[TMP2]]<br>
 float32_t test_vfmss_laneq_f32(float32_t a, float32_t b, float32x4_t v) {<br>
@@ -484,9 +478,7 @@ float32_t test_vfmss_laneq_f32(float32_t<br>
<br>
 // CHECK-LABEL: @test_vfmsd_laneq_f64(<br>
 // CHECK:   [[SUB:%.*]] = fsub double -0.000000e+00, %b<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %v to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double><br>
-// CHECK:   [[EXTRACT:%.*]] = extractelement <2 x double> [[TMP1]], i32 1<br>
+// CHECK:   [[EXTRACT:%.*]] = extractelement <2 x double> %v, i32 1<br>
 // CHECK:   [[TMP2:%.*]] = call double @llvm.fma.f64(double [[SUB]], double [[EXTRACT]], double %a)<br>
 // CHECK:   ret double [[TMP2]]<br>
 float64_t test_vfmsd_laneq_f64(float64_t a, float64_t b, float64x2_t v) {<br>
<br>
Modified: cfe/trunk/test/CodeGen/aarch64-neon-intrinsics.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-neon-intrinsics.c?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-neon-intrinsics.c?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/aarch64-neon-intrinsics.c (original)<br>
+++ cfe/trunk/test/CodeGen/aarch64-neon-intrinsics.c Wed Oct  9 10:57:59 2019<br>
@@ -8703,7 +8703,6 @@ uint64_t test_vqrshld_u64(uint64_t a, ui<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpaddd_s64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
 // CHECK:   [[VPADDD_S64_I:%.*]] = call i64 @llvm.aarch64.neon.uaddv.i64.v2i64(<2 x i64> %a)<br>
 // CHECK:   ret i64 [[VPADDD_S64_I]]<br>
 int64_t test_vpaddd_s64(int64x2_t a) {<br>
@@ -8711,7 +8710,6 @@ int64_t test_vpaddd_s64(int64x2_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpadds_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
 // CHECK:   [[LANE0_I:%.*]] = extractelement <2 x float> %a, i64 0<br>
 // CHECK:   [[LANE1_I:%.*]] = extractelement <2 x float> %a, i64 1<br>
 // CHECK:   [[VPADDD_I:%.*]] = fadd float [[LANE0_I]], [[LANE1_I]]<br>
@@ -8721,7 +8719,6 @@ float32_t test_vpadds_f32(float32x2_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpaddd_f64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8><br>
 // CHECK:   [[LANE0_I:%.*]] = extractelement <2 x double> %a, i64 0<br>
 // CHECK:   [[LANE1_I:%.*]] = extractelement <2 x double> %a, i64 1<br>
 // CHECK:   [[VPADDD_I:%.*]] = fadd double [[LANE0_I]], [[LANE1_I]]<br>
@@ -8731,7 +8728,6 @@ float64_t test_vpaddd_f64(float64x2_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpmaxnms_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
 // CHECK:   [[VPMAXNMS_F32_I:%.*]] = call float @llvm.aarch64.neon.fmaxnmv.f32.v2f32(<2 x float> %a)<br>
 // CHECK:   ret float [[VPMAXNMS_F32_I]]<br>
 float32_t test_vpmaxnms_f32(float32x2_t a) {<br>
@@ -8739,7 +8735,6 @@ float32_t test_vpmaxnms_f32(float32x2_t<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpmaxnmqd_f64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8><br>
 // CHECK:   [[VPMAXNMQD_F64_I:%.*]] = call double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double> %a)<br>
 // CHECK:   ret double [[VPMAXNMQD_F64_I]]<br>
 float64_t test_vpmaxnmqd_f64(float64x2_t a) {<br>
@@ -8747,7 +8742,6 @@ float64_t test_vpmaxnmqd_f64(float64x2_t<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpmaxs_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
 // CHECK:   [[VPMAXS_F32_I:%.*]] = call float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float> %a)<br>
 // CHECK:   ret float [[VPMAXS_F32_I]]<br>
 float32_t test_vpmaxs_f32(float32x2_t a) {<br>
@@ -8755,7 +8749,6 @@ float32_t test_vpmaxs_f32(float32x2_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpmaxqd_f64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8><br>
 // CHECK:   [[VPMAXQD_F64_I:%.*]] = call double @llvm.aarch64.neon.fmaxv.f64.v2f64(<2 x double> %a)<br>
 // CHECK:   ret double [[VPMAXQD_F64_I]]<br>
 float64_t test_vpmaxqd_f64(float64x2_t a) {<br>
@@ -8763,7 +8756,6 @@ float64_t test_vpmaxqd_f64(float64x2_t a<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpminnms_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
 // CHECK:   [[VPMINNMS_F32_I:%.*]] = call float @llvm.aarch64.neon.fminnmv.f32.v2f32(<2 x float> %a)<br>
 // CHECK:   ret float [[VPMINNMS_F32_I]]<br>
 float32_t test_vpminnms_f32(float32x2_t a) {<br>
@@ -8771,7 +8763,6 @@ float32_t test_vpminnms_f32(float32x2_t<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpminnmqd_f64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8><br>
 // CHECK:   [[VPMINNMQD_F64_I:%.*]] = call double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double> %a)<br>
 // CHECK:   ret double [[VPMINNMQD_F64_I]]<br>
 float64_t test_vpminnmqd_f64(float64x2_t a) {<br>
@@ -8779,7 +8770,6 @@ float64_t test_vpminnmqd_f64(float64x2_t<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpmins_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
 // CHECK:   [[VPMINS_F32_I:%.*]] = call float @llvm.aarch64.neon.fminv.f32.v2f32(<2 x float> %a)<br>
 // CHECK:   ret float [[VPMINS_F32_I]]<br>
 float32_t test_vpmins_f32(float32x2_t a) {<br>
@@ -8787,7 +8777,6 @@ float32_t test_vpmins_f32(float32x2_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpminqd_f64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8><br>
 // CHECK:   [[VPMINQD_F64_I:%.*]] = call double @llvm.aarch64.neon.fminv.f64.v2f64(<2 x double> %a)<br>
 // CHECK:   ret double [[VPMINQD_F64_I]]<br>
 float64_t test_vpminqd_f64(float64x2_t a) {<br>
@@ -17690,7 +17679,6 @@ int64x1_t test_vneg_s64(int64x1_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vaddv_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
 // CHECK:   [[VADDV_F32_I:%.*]] = call float @llvm.aarch64.neon.faddv.f32.v2f32(<2 x float> %a)<br>
 // CHECK:   ret float [[VADDV_F32_I]]<br>
 float32_t test_vaddv_f32(float32x2_t a) {<br>
@@ -17698,7 +17686,6 @@ float32_t test_vaddv_f32(float32x2_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vaddvq_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8><br>
 // CHECK:   [[VADDVQ_F32_I:%.*]] = call float @llvm.aarch64.neon.faddv.f32.v4f32(<4 x float> %a)<br>
 // CHECK:   ret float [[VADDVQ_F32_I]]<br>
 float32_t test_vaddvq_f32(float32x4_t a) {<br>
@@ -17706,7 +17693,6 @@ float32_t test_vaddvq_f32(float32x4_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vaddvq_f64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8><br>
 // CHECK:   [[VADDVQ_F64_I:%.*]] = call double @llvm.aarch64.neon.faddv.f64.v2f64(<2 x double> %a)<br>
 // CHECK:   ret double [[VADDVQ_F64_I]]<br>
 float64_t test_vaddvq_f64(float64x2_t a) {<br>
@@ -17714,7 +17700,6 @@ float64_t test_vaddvq_f64(float64x2_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vmaxv_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
 // CHECK:   [[VMAXV_F32_I:%.*]] = call float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float> %a)<br>
 // CHECK:   ret float [[VMAXV_F32_I]]<br>
 float32_t test_vmaxv_f32(float32x2_t a) {<br>
@@ -17722,7 +17707,6 @@ float32_t test_vmaxv_f32(float32x2_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vmaxvq_f64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8><br>
 // CHECK:   [[VMAXVQ_F64_I:%.*]] = call double @llvm.aarch64.neon.fmaxv.f64.v2f64(<2 x double> %a)<br>
 // CHECK:   ret double [[VMAXVQ_F64_I]]<br>
 float64_t test_vmaxvq_f64(float64x2_t a) {<br>
@@ -17730,7 +17714,6 @@ float64_t test_vmaxvq_f64(float64x2_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vminv_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
 // CHECK:   [[VMINV_F32_I:%.*]] = call float @llvm.aarch64.neon.fminv.f32.v2f32(<2 x float> %a)<br>
 // CHECK:   ret float [[VMINV_F32_I]]<br>
 float32_t test_vminv_f32(float32x2_t a) {<br>
@@ -17738,7 +17721,6 @@ float32_t test_vminv_f32(float32x2_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vminvq_f64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8><br>
 // CHECK:   [[VMINVQ_F64_I:%.*]] = call double @llvm.aarch64.neon.fminv.f64.v2f64(<2 x double> %a)<br>
 // CHECK:   ret double [[VMINVQ_F64_I]]<br>
 float64_t test_vminvq_f64(float64x2_t a) {<br>
@@ -17746,7 +17728,6 @@ float64_t test_vminvq_f64(float64x2_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vmaxnmvq_f64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8><br>
 // CHECK:   [[VMAXNMVQ_F64_I:%.*]] = call double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double> %a)<br>
 // CHECK:   ret double [[VMAXNMVQ_F64_I]]<br>
 float64_t test_vmaxnmvq_f64(float64x2_t a) {<br>
@@ -17754,7 +17735,6 @@ float64_t test_vmaxnmvq_f64(float64x2_t<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vmaxnmv_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
 // CHECK:   [[VMAXNMV_F32_I:%.*]] = call float @llvm.aarch64.neon.fmaxnmv.f32.v2f32(<2 x float> %a)<br>
 // CHECK:   ret float [[VMAXNMV_F32_I]]<br>
 float32_t test_vmaxnmv_f32(float32x2_t a) {<br>
@@ -17762,7 +17742,6 @@ float32_t test_vmaxnmv_f32(float32x2_t a<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vminnmvq_f64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8><br>
 // CHECK:   [[VMINNMVQ_F64_I:%.*]] = call double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double> %a)<br>
 // CHECK:   ret double [[VMINNMVQ_F64_I]]<br>
 float64_t test_vminnmvq_f64(float64x2_t a) {<br>
@@ -17770,7 +17749,6 @@ float64_t test_vminnmvq_f64(float64x2_t<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vminnmv_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
 // CHECK:   [[VMINNMV_F32_I:%.*]] = call float @llvm.aarch64.neon.fminnmv.f32.v2f32(<2 x float> %a)<br>
 // CHECK:   ret float [[VMINNMV_F32_I]]<br>
 float32_t test_vminnmv_f32(float32x2_t a) {<br>
@@ -17798,7 +17776,6 @@ uint64x2_t test_vpaddq_u64(uint64x2_t a,<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vpaddd_u64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
 // CHECK:   [[VPADDD_U64_I:%.*]] = call i64 @llvm.aarch64.neon.uaddv.i64.v2i64(<2 x i64> %a)<br>
 // CHECK:   ret i64 [[VPADDD_U64_I]]<br>
 uint64_t test_vpaddd_u64(uint64x2_t a) {<br>
@@ -17806,7 +17783,6 @@ uint64_t test_vpaddd_u64(uint64x2_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vaddvq_s64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
 // CHECK:   [[VADDVQ_S64_I:%.*]] = call i64 @llvm.aarch64.neon.saddv.i64.v2i64(<2 x i64> %a)<br>
 // CHECK:   ret i64 [[VADDVQ_S64_I]]<br>
 int64_t test_vaddvq_s64(int64x2_t a) {<br>
@@ -17814,7 +17790,6 @@ int64_t test_vaddvq_s64(int64x2_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vaddvq_u64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
 // CHECK:   [[VADDVQ_U64_I:%.*]] = call i64 @llvm.aarch64.neon.uaddv.i64.v2i64(<2 x i64> %a)<br>
 // CHECK:   ret i64 [[VADDVQ_U64_I]]<br>
 uint64_t test_vaddvq_u64(uint64x2_t a) {<br>
@@ -18178,7 +18153,6 @@ float64x1_t test_vrsqrts_f64(float64x1_t<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vminv_s32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
 // CHECK:   [[VMINV_S32_I:%.*]] = call i32 @llvm.aarch64.neon.sminv.i32.v2i32(<2 x i32> %a)<br>
 // CHECK:   ret i32 [[VMINV_S32_I]]<br>
 int32_t test_vminv_s32(int32x2_t a) {<br>
@@ -18186,7 +18160,6 @@ int32_t test_vminv_s32(int32x2_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vminv_u32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
 // CHECK:   [[VMINV_U32_I:%.*]] = call i32 @llvm.aarch64.neon.uminv.i32.v2i32(<2 x i32> %a)<br>
 // CHECK:   ret i32 [[VMINV_U32_I]]<br>
 uint32_t test_vminv_u32(uint32x2_t a) {<br>
@@ -18194,7 +18167,6 @@ uint32_t test_vminv_u32(uint32x2_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vmaxv_s32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
 // CHECK:   [[VMAXV_S32_I:%.*]] = call i32 @llvm.aarch64.neon.smaxv.i32.v2i32(<2 x i32> %a)<br>
 // CHECK:   ret i32 [[VMAXV_S32_I]]<br>
 int32_t test_vmaxv_s32(int32x2_t a) {<br>
@@ -18202,7 +18174,6 @@ int32_t test_vmaxv_s32(int32x2_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vmaxv_u32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
 // CHECK:   [[VMAXV_U32_I:%.*]] = call i32 @llvm.aarch64.neon.umaxv.i32.v2i32(<2 x i32> %a)<br>
 // CHECK:   ret i32 [[VMAXV_U32_I]]<br>
 uint32_t test_vmaxv_u32(uint32x2_t a) {<br>
@@ -18210,7 +18181,6 @@ uint32_t test_vmaxv_u32(uint32x2_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vaddv_s32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
 // CHECK:   [[VADDV_S32_I:%.*]] = call i32 @llvm.aarch64.neon.saddv.i32.v2i32(<2 x i32> %a)<br>
 // CHECK:   ret i32 [[VADDV_S32_I]]<br>
 int32_t test_vaddv_s32(int32x2_t a) {<br>
@@ -18218,7 +18188,6 @@ int32_t test_vaddv_s32(int32x2_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vaddv_u32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
 // CHECK:   [[VADDV_U32_I:%.*]] = call i32 @llvm.aarch64.neon.uaddv.i32.v2i32(<2 x i32> %a)<br>
 // CHECK:   ret i32 [[VADDV_U32_I]]<br>
 uint32_t test_vaddv_u32(uint32x2_t a) {<br>
@@ -18226,7 +18195,6 @@ uint32_t test_vaddv_u32(uint32x2_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vaddlv_s32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
 // CHECK:   [[VADDLV_S32_I:%.*]] = call i64 @llvm.aarch64.neon.saddlv.i64.v2i32(<2 x i32> %a)<br>
 // CHECK:   ret i64 [[VADDLV_S32_I]]<br>
 int64_t test_vaddlv_s32(int32x2_t a) {<br>
@@ -18234,7 +18202,6 @@ int64_t test_vaddlv_s32(int32x2_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vaddlv_u32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
 // CHECK:   [[VADDLV_U32_I:%.*]] = call i64 @llvm.aarch64.neon.uaddlv.i64.v2i32(<2 x i32> %a)<br>
 // CHECK:   ret i64 [[VADDLV_U32_I]]<br>
 uint64_t test_vaddlv_u32(uint32x2_t a) {<br>
<br>
Modified: cfe/trunk/test/CodeGen/aarch64-neon-scalar-copy.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-neon-scalar-copy.c?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-neon-scalar-copy.c?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/aarch64-neon-scalar-copy.c (original)<br>
+++ cfe/trunk/test/CodeGen/aarch64-neon-scalar-copy.c Wed Oct  9 10:57:59 2019<br>
@@ -4,9 +4,7 @@<br>
 #include <arm_neon.h><br>
<br>
 // CHECK-LABEL: define float @test_vdups_lane_f32(<2 x float> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float><br>
-// CHECK:   [[VDUPS_LANE:%.*]] = extractelement <2 x float> [[TMP1]], i32 1<br>
+// CHECK:   [[VDUPS_LANE:%.*]] = extractelement <2 x float> %a, i32 1<br>
 // CHECK:   ret float [[VDUPS_LANE]]<br>
 float32_t test_vdups_lane_f32(float32x2_t a) {<br>
   return vdups_lane_f32(a, 1);<br>
@@ -14,9 +12,7 @@ float32_t test_vdups_lane_f32(float32x2_<br>
<br>
<br>
 // CHECK-LABEL: define double @test_vdupd_lane_f64(<1 x double> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double><br>
-// CHECK:   [[VDUPD_LANE:%.*]] = extractelement <1 x double> [[TMP1]], i32 0<br>
+// CHECK:   [[VDUPD_LANE:%.*]] = extractelement <1 x double> %a, i32 0<br>
 // CHECK:   ret double [[VDUPD_LANE]]<br>
 float64_t test_vdupd_lane_f64(float64x1_t a) {<br>
   return vdupd_lane_f64(a, 0);<br>
@@ -24,9 +20,7 @@ float64_t test_vdupd_lane_f64(float64x1_<br>
<br>
<br>
 // CHECK-LABEL: define float @test_vdups_laneq_f32(<4 x float> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x float> [[TMP1]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x float> %a, i32 3<br>
 // CHECK:   ret float [[VGETQ_LANE]]<br>
 float32_t test_vdups_laneq_f32(float32x4_t a) {<br>
   return vdups_laneq_f32(a, 3);<br>
@@ -34,9 +28,7 @@ float32_t test_vdups_laneq_f32(float32x4<br>
<br>
<br>
 // CHECK-LABEL: define double @test_vdupd_laneq_f64(<2 x double> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> [[TMP1]], i32 1<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> %a, i32 1<br>
 // CHECK:   ret double [[VGETQ_LANE]]<br>
 float64_t test_vdupd_laneq_f64(float64x2_t a) {<br>
   return vdupd_laneq_f64(a, 1);<br>
@@ -52,9 +44,7 @@ int8_t test_vdupb_lane_s8(int8x8_t a) {<br>
<br>
<br>
 // CHECK-LABEL: define i16 @test_vduph_lane_s16(<4 x i16> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %a, i32 3<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 int16_t test_vduph_lane_s16(int16x4_t a) {<br>
   return vduph_lane_s16(a, 3);<br>
@@ -62,9 +52,7 @@ int16_t test_vduph_lane_s16(int16x4_t a)<br>
<br>
<br>
 // CHECK-LABEL: define i32 @test_vdups_lane_s32(<2 x i32> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> %a, i32 1<br>
 // CHECK:   ret i32 [[VGET_LANE]]<br>
 int32_t test_vdups_lane_s32(int32x2_t a) {<br>
   return vdups_lane_s32(a, 1);<br>
@@ -72,9 +60,7 @@ int32_t test_vdups_lane_s32(int32x2_t a)<br>
<br>
<br>
 // CHECK-LABEL: define i64 @test_vdupd_lane_s64(<1 x i64> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> [[TMP1]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> %a, i32 0<br>
 // CHECK:   ret i64 [[VGET_LANE]]<br>
 int64_t test_vdupd_lane_s64(int64x1_t a) {<br>
   return vdupd_lane_s64(a, 0);<br>
@@ -90,9 +76,7 @@ uint8_t test_vdupb_lane_u8(uint8x8_t a)<br>
<br>
<br>
 // CHECK-LABEL: define i16 @test_vduph_lane_u16(<4 x i16> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %a, i32 3<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 uint16_t test_vduph_lane_u16(uint16x4_t a) {<br>
   return vduph_lane_u16(a, 3);<br>
@@ -100,9 +84,7 @@ uint16_t test_vduph_lane_u16(uint16x4_t<br>
<br>
<br>
 // CHECK-LABEL: define i32 @test_vdups_lane_u32(<2 x i32> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> %a, i32 1<br>
 // CHECK:   ret i32 [[VGET_LANE]]<br>
 uint32_t test_vdups_lane_u32(uint32x2_t a) {<br>
   return vdups_lane_u32(a, 1);<br>
@@ -110,9 +92,7 @@ uint32_t test_vdups_lane_u32(uint32x2_t<br>
<br>
<br>
 // CHECK-LABEL: define i64 @test_vdupd_lane_u64(<1 x i64> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> [[TMP1]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> %a, i32 0<br>
 // CHECK:   ret i64 [[VGET_LANE]]<br>
 uint64_t test_vdupd_lane_u64(uint64x1_t a) {<br>
   return vdupd_lane_u64(a, 0);<br>
@@ -127,9 +107,7 @@ int8_t test_vdupb_laneq_s8(int8x16_t a)<br>
<br>
<br>
 // CHECK-LABEL: define i16 @test_vduph_laneq_s16(<8 x i16> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> %a, i32 7<br>
 // CHECK:   ret i16 [[VGETQ_LANE]]<br>
 int16_t test_vduph_laneq_s16(int16x8_t a) {<br>
   return vduph_laneq_s16(a, 7);<br>
@@ -137,9 +115,7 @@ int16_t test_vduph_laneq_s16(int16x8_t a<br>
<br>
<br>
 // CHECK-LABEL: define i32 @test_vdups_laneq_s32(<4 x i32> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> %a, i32 3<br>
 // CHECK:   ret i32 [[VGETQ_LANE]]<br>
 int32_t test_vdups_laneq_s32(int32x4_t a) {<br>
   return vdups_laneq_s32(a, 3);<br>
@@ -147,9 +123,7 @@ int32_t test_vdups_laneq_s32(int32x4_t a<br>
<br>
<br>
 // CHECK-LABEL: define i64 @test_vdupd_laneq_s64(<2 x i64> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> [[TMP1]], i32 1<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> %a, i32 1<br>
 // CHECK:   ret i64 [[VGETQ_LANE]]<br>
 int64_t test_vdupd_laneq_s64(int64x2_t a) {<br>
   return vdupd_laneq_s64(a, 1);<br>
@@ -165,9 +139,7 @@ uint8_t test_vdupb_laneq_u8(uint8x16_t a<br>
<br>
<br>
 // CHECK-LABEL: define i16 @test_vduph_laneq_u16(<8 x i16> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> %a, i32 7<br>
 // CHECK:   ret i16 [[VGETQ_LANE]]<br>
 uint16_t test_vduph_laneq_u16(uint16x8_t a) {<br>
   return vduph_laneq_u16(a, 7);<br>
@@ -175,9 +147,7 @@ uint16_t test_vduph_laneq_u16(uint16x8_t<br>
<br>
<br>
 // CHECK-LABEL: define i32 @test_vdups_laneq_u32(<4 x i32> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> %a, i32 3<br>
 // CHECK:   ret i32 [[VGETQ_LANE]]<br>
 uint32_t test_vdups_laneq_u32(uint32x4_t a) {<br>
   return vdups_laneq_u32(a, 3);<br>
@@ -185,9 +155,7 @@ uint32_t test_vdups_laneq_u32(uint32x4_t<br>
<br>
<br>
 // CHECK-LABEL: define i64 @test_vdupd_laneq_u64(<2 x i64> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> [[TMP1]], i32 1<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> %a, i32 1<br>
 // CHECK:   ret i64 [[VGETQ_LANE]]<br>
 uint64_t test_vdupd_laneq_u64(uint64x2_t a) {<br>
   return vdupd_laneq_u64(a, 1);<br>
@@ -201,9 +169,7 @@ poly8_t test_vdupb_lane_p8(poly8x8_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: define i16 @test_vduph_lane_p16(<4 x i16> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %a, i32 3<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 poly16_t test_vduph_lane_p16(poly16x4_t a) {<br>
   return vduph_lane_p16(a, 3);<br>
@@ -217,9 +183,7 @@ poly8_t test_vdupb_laneq_p8(poly8x16_t a<br>
 }<br>
<br>
 // CHECK-LABEL: define i16 @test_vduph_laneq_p16(<8 x i16> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> %a, i32 7<br>
 // CHECK:   ret i16 [[VGETQ_LANE]]<br>
 poly16_t test_vduph_laneq_p16(poly16x8_t a) {<br>
   return vduph_laneq_p16(a, 7);<br>
<br>
Modified: cfe/trunk/test/CodeGen/aarch64-neon-scalar-x-indexed-elem.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-neon-scalar-x-indexed-elem.c?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-neon-scalar-x-indexed-elem.c?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/aarch64-neon-scalar-x-indexed-elem.c (original)<br>
+++ cfe/trunk/test/CodeGen/aarch64-neon-scalar-x-indexed-elem.c Wed Oct  9 10:57:59 2019<br>
@@ -7,9 +7,7 @@<br>
<br>
<br>
 // CHECK-LABEL: define float @test_vmuls_lane_f32(float %a, <2 x float> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x float> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x float> %b, i32 1<br>
 // CHECK:   [[MUL:%.*]] = fmul float %a, [[VGET_LANE]]<br>
 // CHECK:   ret float [[MUL]]<br>
 float32_t test_vmuls_lane_f32(float32_t a, float32x2_t b) {<br>
@@ -17,9 +15,7 @@ float32_t test_vmuls_lane_f32(float32_t<br>
 }<br>
<br>
 // CHECK-LABEL: define double @test_vmuld_lane_f64(double %a, <1 x double> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> [[TMP1]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> %b, i32 0<br>
 // CHECK:   [[MUL:%.*]] = fmul double %a, [[VGET_LANE]]<br>
 // CHECK:   ret double [[MUL]]<br>
 float64_t test_vmuld_lane_f64(float64_t a, float64x1_t b) {<br>
@@ -27,9 +23,7 @@ float64_t test_vmuld_lane_f64(float64_t<br>
 }<br>
<br>
 // CHECK-LABEL: define float @test_vmuls_laneq_f32(float %a, <4 x float> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x float> [[TMP1]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x float> %b, i32 3<br>
 // CHECK:   [[MUL:%.*]] = fmul float %a, [[VGETQ_LANE]]<br>
 // CHECK:   ret float [[MUL]]<br>
 float32_t test_vmuls_laneq_f32(float32_t a, float32x4_t b) {<br>
@@ -37,9 +31,7 @@ float32_t test_vmuls_laneq_f32(float32_t<br>
 }<br>
<br>
 // CHECK-LABEL: define double @test_vmuld_laneq_f64(double %a, <2 x double> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> [[TMP1]], i32 1<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> %b, i32 1<br>
 // CHECK:   [[MUL:%.*]] = fmul double %a, [[VGETQ_LANE]]<br>
 // CHECK:   ret double [[MUL]]<br>
 float64_t test_vmuld_laneq_f64(float64_t a, float64x2_t b) {<br>
@@ -56,9 +48,7 @@ float64x1_t test_vmul_n_f64(float64x1_t<br>
 }<br>
<br>
 // CHECK-LABEL: define float @test_vmulxs_lane_f32(float %a, <2 x float> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x float> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x float> %b, i32 1<br>
 // CHECK:   [[VMULXS_F32_I:%.*]] = call float @llvm.aarch64.neon.fmulx.f32(float %a, float [[VGET_LANE]])<br>
 // CHECK:   ret float [[VMULXS_F32_I]]<br>
 float32_t test_vmulxs_lane_f32(float32_t a, float32x2_t b) {<br>
@@ -66,9 +56,7 @@ float32_t test_vmulxs_lane_f32(float32_t<br>
 }<br>
<br>
 // CHECK-LABEL: define float @test_vmulxs_laneq_f32(float %a, <4 x float> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x float> [[TMP1]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x float> %b, i32 3<br>
 // CHECK:   [[VMULXS_F32_I:%.*]] = call float @llvm.aarch64.neon.fmulx.f32(float %a, float [[VGETQ_LANE]])<br>
 // CHECK:   ret float [[VMULXS_F32_I]]<br>
 float32_t test_vmulxs_laneq_f32(float32_t a, float32x4_t b) {<br>
@@ -76,9 +64,7 @@ float32_t test_vmulxs_laneq_f32(float32_<br>
 }<br>
<br>
 // CHECK-LABEL: define double @test_vmulxd_lane_f64(double %a, <1 x double> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> [[TMP1]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> %b, i32 0<br>
 // CHECK:   [[VMULXD_F64_I:%.*]] = call double @llvm.aarch64.neon.fmulx.f64(double %a, double [[VGET_LANE]])<br>
 // CHECK:   ret double [[VMULXD_F64_I]]<br>
 float64_t test_vmulxd_lane_f64(float64_t a, float64x1_t b) {<br>
@@ -86,9 +72,7 @@ float64_t test_vmulxd_lane_f64(float64_t<br>
 }<br>
<br>
 // CHECK-LABEL: define double @test_vmulxd_laneq_f64(double %a, <2 x double> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> [[TMP1]], i32 1<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> %b, i32 1<br>
 // CHECK:   [[VMULXD_F64_I:%.*]] = call double @llvm.aarch64.neon.fmulx.f64(double %a, double [[VGETQ_LANE]])<br>
 // CHECK:   ret double [[VMULXD_F64_I]]<br>
 float64_t test_vmulxd_laneq_f64(float64_t a, float64x2_t b) {<br>
@@ -96,16 +80,10 @@ float64_t test_vmulxd_laneq_f64(float64_<br>
 }<br>
<br>
 // CHECK-LABEL: define <1 x double> @test_vmulx_lane_f64(<1 x double> %a, <1 x double> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> [[TMP1]], i32 0<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <1 x double> %b to <8 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <8 x i8> [[TMP2]] to <1 x double><br>
-// CHECK:   [[VGET_LANE6:%.*]] = extractelement <1 x double> [[TMP3]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> %a, i32 0<br>
+// CHECK:   [[VGET_LANE6:%.*]] = extractelement <1 x double> %b, i32 0<br>
 // CHECK:   [[VMULXD_F64_I:%.*]] = call double @llvm.aarch64.neon.fmulx.f64(double [[VGET_LANE]], double [[VGET_LANE6]])<br>
-// CHECK:   [[TMP4:%.*]] = bitcast <1 x double> %a to <8 x i8><br>
-// CHECK:   [[TMP5:%.*]] = bitcast <8 x i8> [[TMP4]] to <1 x double><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x double> [[TMP5]], double [[VMULXD_F64_I]], i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x double> %a, double [[VMULXD_F64_I]], i32 0<br>
 // CHECK:   ret <1 x double> [[VSET_LANE]]<br>
 float64x1_t test_vmulx_lane_f64(float64x1_t a, float64x1_t b) {<br>
   return vmulx_lane_f64(a, b, 0);<br>
@@ -113,32 +91,20 @@ float64x1_t test_vmulx_lane_f64(float64x<br>
<br>
<br>
 // CHECK-LABEL: define <1 x double> @test_vmulx_laneq_f64_0(<1 x double> %a, <2 x double> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> [[TMP1]], i32 0<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <2 x double> %b to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <2 x double><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> [[TMP3]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> %a, i32 0<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> %b, i32 0<br>
 // CHECK:   [[VMULXD_F64_I:%.*]] = call double @llvm.aarch64.neon.fmulx.f64(double [[VGET_LANE]], double [[VGETQ_LANE]])<br>
-// CHECK:   [[TMP4:%.*]] = bitcast <1 x double> %a to <8 x i8><br>
-// CHECK:   [[TMP5:%.*]] = bitcast <8 x i8> [[TMP4]] to <1 x double><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x double> [[TMP5]], double [[VMULXD_F64_I]], i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x double> %a, double [[VMULXD_F64_I]], i32 0<br>
 // CHECK:   ret <1 x double> [[VSET_LANE]]<br>
 float64x1_t test_vmulx_laneq_f64_0(float64x1_t a, float64x2_t b) {<br>
   return vmulx_laneq_f64(a, b, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: define <1 x double> @test_vmulx_laneq_f64_1(<1 x double> %a, <2 x double> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> [[TMP1]], i32 0<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <2 x double> %b to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <2 x double><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> [[TMP3]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> %a, i32 0<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> %b, i32 1<br>
 // CHECK:   [[VMULXD_F64_I:%.*]] = call double @llvm.aarch64.neon.fmulx.f64(double [[VGET_LANE]], double [[VGETQ_LANE]])<br>
-// CHECK:   [[TMP4:%.*]] = bitcast <1 x double> %a to <8 x i8><br>
-// CHECK:   [[TMP5:%.*]] = bitcast <8 x i8> [[TMP4]] to <1 x double><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x double> [[TMP5]], double [[VMULXD_F64_I]], i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x double> %a, double [[VMULXD_F64_I]], i32 0<br>
 // CHECK:   ret <1 x double> [[VSET_LANE]]<br>
 float64x1_t test_vmulx_laneq_f64_1(float64x1_t a, float64x2_t b) {<br>
   return vmulx_laneq_f64(a, b, 1);<br>
@@ -146,9 +112,7 @@ float64x1_t test_vmulx_laneq_f64_1(float<br>
<br>
<br>
 // CHECK-LABEL: define float @test_vfmas_lane_f32(float %a, float %b, <2 x float> %c) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %c to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float><br>
-// CHECK:   [[EXTRACT:%.*]] = extractelement <2 x float> [[TMP1]], i32 1<br>
+// CHECK:   [[EXTRACT:%.*]] = extractelement <2 x float> %c, i32 1<br>
 // CHECK:   [[TMP2:%.*]] = call float @llvm.fma.f32(float %b, float [[EXTRACT]], float %a)<br>
 // CHECK:   ret float [[TMP2]]<br>
 float32_t test_vfmas_lane_f32(float32_t a, float32_t b, float32x2_t c) {<br>
@@ -156,9 +120,7 @@ float32_t test_vfmas_lane_f32(float32_t<br>
 }<br>
<br>
 // CHECK-LABEL: define double @test_vfmad_lane_f64(double %a, double %b, <1 x double> %c) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x double> %c to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x double><br>
-// CHECK:   [[EXTRACT:%.*]] = extractelement <1 x double> [[TMP1]], i32 0<br>
+// CHECK:   [[EXTRACT:%.*]] = extractelement <1 x double> %c, i32 0<br>
 // CHECK:   [[TMP2:%.*]] = call double @llvm.fma.f64(double %b, double [[EXTRACT]], double %a)<br>
 // CHECK:   ret double [[TMP2]]<br>
 float64_t test_vfmad_lane_f64(float64_t a, float64_t b, float64x1_t c) {<br>
@@ -166,9 +128,7 @@ float64_t test_vfmad_lane_f64(float64_t<br>
 }<br>
<br>
 // CHECK-LABEL: define double @test_vfmad_laneq_f64(double %a, double %b, <2 x double> %c) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %c to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double><br>
-// CHECK:   [[EXTRACT:%.*]] = extractelement <2 x double> [[TMP1]], i32 1<br>
+// CHECK:   [[EXTRACT:%.*]] = extractelement <2 x double> %c, i32 1<br>
 // CHECK:   [[TMP2:%.*]] = call double @llvm.fma.f64(double %b, double [[EXTRACT]], double %a)<br>
 // CHECK:   ret double [[TMP2]]<br>
 float64_t test_vfmad_laneq_f64(float64_t a, float64_t b, float64x2_t c) {<br>
@@ -177,9 +137,7 @@ float64_t test_vfmad_laneq_f64(float64_t<br>
<br>
 // CHECK-LABEL: define float @test_vfmss_lane_f32(float %a, float %b, <2 x float> %c) #0 {<br>
 // CHECK:   [[SUB:%.*]] = fsub float -0.000000e+00, %b<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %c to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float><br>
-// CHECK:   [[EXTRACT:%.*]] = extractelement <2 x float> [[TMP1]], i32 1<br>
+// CHECK:   [[EXTRACT:%.*]] = extractelement <2 x float> %c, i32 1<br>
 // CHECK:   [[TMP2:%.*]] = call float @llvm.fma.f32(float [[SUB]], float [[EXTRACT]], float %a)<br>
 // CHECK:   ret float [[TMP2]]<br>
 float32_t test_vfmss_lane_f32(float32_t a, float32_t b, float32x2_t c) {<br>
@@ -247,9 +205,7 @@ float64x1_t test_vfms_laneq_f64(float64x<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vqdmullh_lane_s16(i16 %a, <4 x i16> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %b, i32 3<br>
 // CHECK:   [[TMP2:%.*]] = insertelement <4 x i16> undef, i16 %a, i64 0<br>
 // CHECK:   [[TMP3:%.*]] = insertelement <4 x i16> undef, i16 [[VGET_LANE]], i64 0<br>
 // CHECK:   [[VQDMULLH_S16_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]])<br>
@@ -260,9 +216,7 @@ int32_t test_vqdmullh_lane_s16(int16_t a<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vqdmulls_lane_s32(i32 %a, <2 x i32> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> %b, i32 1<br>
 // CHECK:   [[VQDMULLS_S32_I:%.*]] = call i64 @llvm.aarch64.neon.sqdmulls.scalar(i32 %a, i32 [[VGET_LANE]])<br>
 // CHECK:   ret i64 [[VQDMULLS_S32_I]]<br>
 int64_t test_vqdmulls_lane_s32(int32_t a, int32x2_t b) {<br>
@@ -270,9 +224,7 @@ int64_t test_vqdmulls_lane_s32(int32_t a<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vqdmullh_laneq_s16(i16 %a, <8 x i16> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> %b, i32 7<br>
 // CHECK:   [[TMP2:%.*]] = insertelement <4 x i16> undef, i16 %a, i64 0<br>
 // CHECK:   [[TMP3:%.*]] = insertelement <4 x i16> undef, i16 [[VGETQ_LANE]], i64 0<br>
 // CHECK:   [[VQDMULLH_S16_I:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]])<br>
@@ -283,9 +235,7 @@ int32_t test_vqdmullh_laneq_s16(int16_t<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vqdmulls_laneq_s32(i32 %a, <4 x i32> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> %b, i32 3<br>
 // CHECK:   [[VQDMULLS_S32_I:%.*]] = call i64 @llvm.aarch64.neon.sqdmulls.scalar(i32 %a, i32 [[VGETQ_LANE]])<br>
 // CHECK:   ret i64 [[VQDMULLS_S32_I]]<br>
 int64_t test_vqdmulls_laneq_s32(int32_t a, int32x4_t b) {<br>
@@ -293,9 +243,7 @@ int64_t test_vqdmulls_laneq_s32(int32_t<br>
 }<br>
<br>
 // CHECK-LABEL: define i16 @test_vqdmulhh_lane_s16(i16 %a, <4 x i16> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %b, i32 3<br>
 // CHECK:   [[TMP2:%.*]] = insertelement <4 x i16> undef, i16 %a, i64 0<br>
 // CHECK:   [[TMP3:%.*]] = insertelement <4 x i16> undef, i16 [[VGET_LANE]], i64 0<br>
 // CHECK:   [[VQDMULHH_S16_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqdmulh.v4i16(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]])<br>
@@ -306,9 +254,7 @@ int16_t test_vqdmulhh_lane_s16(int16_t a<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vqdmulhs_lane_s32(i32 %a, <2 x i32> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> %b, i32 1<br>
 // CHECK:   [[VQDMULHS_S32_I:%.*]] = call i32 @llvm.aarch64.neon.sqdmulh.i32(i32 %a, i32 [[VGET_LANE]])<br>
 // CHECK:   ret i32 [[VQDMULHS_S32_I]]<br>
 int32_t test_vqdmulhs_lane_s32(int32_t a, int32x2_t b) {<br>
@@ -317,9 +263,7 @@ int32_t test_vqdmulhs_lane_s32(int32_t a<br>
<br>
<br>
 // CHECK-LABEL: define i16 @test_vqdmulhh_laneq_s16(i16 %a, <8 x i16> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> %b, i32 7<br>
 // CHECK:   [[TMP2:%.*]] = insertelement <4 x i16> undef, i16 %a, i64 0<br>
 // CHECK:   [[TMP3:%.*]] = insertelement <4 x i16> undef, i16 [[VGETQ_LANE]], i64 0<br>
 // CHECK:   [[VQDMULHH_S16_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqdmulh.v4i16(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]])<br>
@@ -331,9 +275,7 @@ int16_t test_vqdmulhh_laneq_s16(int16_t<br>
<br>
<br>
 // CHECK-LABEL: define i32 @test_vqdmulhs_laneq_s32(i32 %a, <4 x i32> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> %b, i32 3<br>
 // CHECK:   [[VQDMULHS_S32_I:%.*]] = call i32 @llvm.aarch64.neon.sqdmulh.i32(i32 %a, i32 [[VGETQ_LANE]])<br>
 // CHECK:   ret i32 [[VQDMULHS_S32_I]]<br>
 int32_t test_vqdmulhs_laneq_s32(int32_t a, int32x4_t b) {<br>
@@ -341,9 +283,7 @@ int32_t test_vqdmulhs_laneq_s32(int32_t<br>
 }<br>
<br>
 // CHECK-LABEL: define i16 @test_vqrdmulhh_lane_s16(i16 %a, <4 x i16> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %b, i32 3<br>
 // CHECK:   [[TMP2:%.*]] = insertelement <4 x i16> undef, i16 %a, i64 0<br>
 // CHECK:   [[TMP3:%.*]] = insertelement <4 x i16> undef, i16 [[VGET_LANE]], i64 0<br>
 // CHECK:   [[VQRDMULHH_S16_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]])<br>
@@ -354,9 +294,7 @@ int16_t test_vqrdmulhh_lane_s16(int16_t<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vqrdmulhs_lane_s32(i32 %a, <2 x i32> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> %b, i32 1<br>
 // CHECK:   [[VQRDMULHS_S32_I:%.*]] = call i32 @llvm.aarch64.neon.sqrdmulh.i32(i32 %a, i32 [[VGET_LANE]])<br>
 // CHECK:   ret i32 [[VQRDMULHS_S32_I]]<br>
 int32_t test_vqrdmulhs_lane_s32(int32_t a, int32x2_t b) {<br>
@@ -365,9 +303,7 @@ int32_t test_vqrdmulhs_lane_s32(int32_t<br>
<br>
<br>
 // CHECK-LABEL: define i16 @test_vqrdmulhh_laneq_s16(i16 %a, <8 x i16> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> %b, i32 7<br>
 // CHECK:   [[TMP2:%.*]] = insertelement <4 x i16> undef, i16 %a, i64 0<br>
 // CHECK:   [[TMP3:%.*]] = insertelement <4 x i16> undef, i16 [[VGETQ_LANE]], i64 0<br>
 // CHECK:   [[VQRDMULHH_S16_I:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]])<br>
@@ -379,9 +315,7 @@ int16_t test_vqrdmulhh_laneq_s16(int16_t<br>
<br>
<br>
 // CHECK-LABEL: define i32 @test_vqrdmulhs_laneq_s32(i32 %a, <4 x i32> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> %b, i32 3<br>
 // CHECK:   [[VQRDMULHS_S32_I:%.*]] = call i32 @llvm.aarch64.neon.sqrdmulh.i32(i32 %a, i32 [[VGETQ_LANE]])<br>
 // CHECK:   ret i32 [[VQRDMULHS_S32_I]]<br>
 int32_t test_vqrdmulhs_laneq_s32(int32_t a, int32x4_t b) {<br>
@@ -389,9 +323,7 @@ int32_t test_vqrdmulhs_laneq_s32(int32_t<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vqdmlalh_lane_s16(i32 %a, i16 %b, <4 x i16> %c) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %c to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[LANE:%.*]] = extractelement <4 x i16> %c, i32 3<br>
 // CHECK:   [[TMP2:%.*]] = insertelement <4 x i16> undef, i16 %b, i64 0<br>
 // CHECK:   [[TMP3:%.*]] = insertelement <4 x i16> undef, i16 [[LANE]], i64 0<br>
 // CHECK:   [[VQDMLXL:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]])<br>
@@ -403,9 +335,7 @@ int32_t test_vqdmlalh_lane_s16(int32_t a<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vqdmlals_lane_s32(i64 %a, i32 %b, <2 x i32> %c) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %c to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[LANE:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1<br>
+// CHECK:   [[LANE:%.*]] = extractelement <2 x i32> %c, i32 1<br>
 // CHECK:   [[VQDMLXL:%.*]] = call i64 @llvm.aarch64.neon.sqdmulls.scalar(i32 %b, i32 [[LANE]])<br>
 // CHECK:   [[VQDMLXL1:%.*]] = call i64 @llvm.aarch64.neon.sqadd.i64(i64 %a, i64 [[VQDMLXL]])<br>
 // CHECK:   ret i64 [[VQDMLXL1]]<br>
@@ -414,9 +344,7 @@ int64_t test_vqdmlals_lane_s32(int64_t a<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vqdmlalh_laneq_s16(i32 %a, i16 %b, <8 x i16> %c) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %c to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[LANE:%.*]] = extractelement <8 x i16> %c, i32 7<br>
 // CHECK:   [[TMP2:%.*]] = insertelement <4 x i16> undef, i16 %b, i64 0<br>
 // CHECK:   [[TMP3:%.*]] = insertelement <4 x i16> undef, i16 [[LANE]], i64 0<br>
 // CHECK:   [[VQDMLXL:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]])<br>
@@ -428,9 +356,7 @@ int32_t test_vqdmlalh_laneq_s16(int32_t<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vqdmlals_laneq_s32(i64 %a, i32 %b, <4 x i32> %c) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %c to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
+// CHECK:   [[LANE:%.*]] = extractelement <4 x i32> %c, i32 3<br>
 // CHECK:   [[VQDMLXL:%.*]] = call i64 @llvm.aarch64.neon.sqdmulls.scalar(i32 %b, i32 [[LANE]])<br>
 // CHECK:   [[VQDMLXL1:%.*]] = call i64 @llvm.aarch64.neon.sqadd.i64(i64 %a, i64 [[VQDMLXL]])<br>
 // CHECK:   ret i64 [[VQDMLXL1]]<br>
@@ -439,9 +365,7 @@ int64_t test_vqdmlals_laneq_s32(int64_t<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vqdmlslh_lane_s16(i32 %a, i16 %b, <4 x i16> %c) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %c to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[LANE:%.*]] = extractelement <4 x i16> %c, i32 3<br>
 // CHECK:   [[TMP2:%.*]] = insertelement <4 x i16> undef, i16 %b, i64 0<br>
 // CHECK:   [[TMP3:%.*]] = insertelement <4 x i16> undef, i16 [[LANE]], i64 0<br>
 // CHECK:   [[VQDMLXL:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]])<br>
@@ -453,9 +377,7 @@ int32_t test_vqdmlslh_lane_s16(int32_t a<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vqdmlsls_lane_s32(i64 %a, i32 %b, <2 x i32> %c) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %c to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[LANE:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1<br>
+// CHECK:   [[LANE:%.*]] = extractelement <2 x i32> %c, i32 1<br>
 // CHECK:   [[VQDMLXL:%.*]] = call i64 @llvm.aarch64.neon.sqdmulls.scalar(i32 %b, i32 [[LANE]])<br>
 // CHECK:   [[VQDMLXL1:%.*]] = call i64 @llvm.aarch64.neon.sqsub.i64(i64 %a, i64 [[VQDMLXL]])<br>
 // CHECK:   ret i64 [[VQDMLXL1]]<br>
@@ -464,9 +386,7 @@ int64_t test_vqdmlsls_lane_s32(int64_t a<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vqdmlslh_laneq_s16(i32 %a, i16 %b, <8 x i16> %c) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %c to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[LANE:%.*]] = extractelement <8 x i16> %c, i32 7<br>
 // CHECK:   [[TMP2:%.*]] = insertelement <4 x i16> undef, i16 %b, i64 0<br>
 // CHECK:   [[TMP3:%.*]] = insertelement <4 x i16> undef, i16 [[LANE]], i64 0<br>
 // CHECK:   [[VQDMLXL:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqdmull.v4i32(<4 x i16> [[TMP2]], <4 x i16> [[TMP3]])<br>
@@ -478,9 +398,7 @@ int32_t test_vqdmlslh_laneq_s16(int32_t<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vqdmlsls_laneq_s32(i64 %a, i32 %b, <4 x i32> %c) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %c to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
+// CHECK:   [[LANE:%.*]] = extractelement <4 x i32> %c, i32 3<br>
 // CHECK:   [[VQDMLXL:%.*]] = call i64 @llvm.aarch64.neon.sqdmulls.scalar(i32 %b, i32 [[LANE]])<br>
 // CHECK:   [[VQDMLXL1:%.*]] = call i64 @llvm.aarch64.neon.sqsub.i64(i64 %a, i64 [[VQDMLXL]])<br>
 // CHECK:   ret i64 [[VQDMLXL1]]<br>
@@ -491,16 +409,10 @@ int64_t test_vqdmlsls_laneq_s32(int64_t<br>
 // CHECK-LABEL: define <1 x double> @test_vmulx_lane_f64_0() #0 {<br>
 // CHECK:   [[TMP0:%.*]] = bitcast i64 4599917171378402754 to <1 x double><br>
 // CHECK:   [[TMP1:%.*]] = bitcast i64 4606655882138939123 to <1 x double><br>
-// CHECK:   [[TMP2:%.*]] = bitcast <1 x double> [[TMP0]] to <8 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <8 x i8> [[TMP2]] to <1 x double><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> [[TMP3]], i32 0<br>
-// CHECK:   [[TMP4:%.*]] = bitcast <1 x double> [[TMP1]] to <8 x i8><br>
-// CHECK:   [[TMP5:%.*]] = bitcast <8 x i8> [[TMP4]] to <1 x double><br>
-// CHECK:   [[VGET_LANE7:%.*]] = extractelement <1 x double> [[TMP5]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> [[TMP0]], i32 0<br>
+// CHECK:   [[VGET_LANE7:%.*]] = extractelement <1 x double> [[TMP1]], i32 0<br>
 // CHECK:   [[VMULXD_F64_I:%.*]] = call double @llvm.aarch64.neon.fmulx.f64(double [[VGET_LANE]], double [[VGET_LANE7]])<br>
-// CHECK:   [[TMP6:%.*]] = bitcast <1 x double> [[TMP0]] to <8 x i8><br>
-// CHECK:   [[TMP7:%.*]] = bitcast <8 x i8> [[TMP6]] to <1 x double><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x double> [[TMP7]], double [[VMULXD_F64_I]], i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x double> [[TMP0]], double [[VMULXD_F64_I]], i32 0<br>
 // CHECK:   ret <1 x double> [[VSET_LANE]]<br>
 float64x1_t test_vmulx_lane_f64_0() {<br>
       float64x1_t arg1;<br>
@@ -517,16 +429,10 @@ float64x1_t test_vmulx_lane_f64_0() {<br>
 // CHECK:   [[TMP0:%.*]] = bitcast i64 4599917171378402754 to <1 x double><br>
 // CHECK:   [[TMP1:%.*]] = bitcast i64 4606655882138939123 to <1 x double><br>
 // CHECK:   [[SHUFFLE_I:%.*]] = shufflevector <1 x double> [[TMP0]], <1 x double> [[TMP1]], <2 x i32> <i32 0, i32 1><br>
-// CHECK:   [[TMP2:%.*]] = bitcast <1 x double> [[TMP0]] to <8 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <8 x i8> [[TMP2]] to <1 x double><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> [[TMP3]], i32 0<br>
-// CHECK:   [[TMP4:%.*]] = bitcast <2 x double> [[SHUFFLE_I]] to <16 x i8><br>
-// CHECK:   [[TMP5:%.*]] = bitcast <16 x i8> [[TMP4]] to <2 x double><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> [[TMP5]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x double> [[TMP0]], i32 0<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> [[SHUFFLE_I]], i32 1<br>
 // CHECK:   [[VMULXD_F64_I:%.*]] = call double @llvm.aarch64.neon.fmulx.f64(double [[VGET_LANE]], double [[VGETQ_LANE]])<br>
-// CHECK:   [[TMP6:%.*]] = bitcast <1 x double> [[TMP0]] to <8 x i8><br>
-// CHECK:   [[TMP7:%.*]] = bitcast <8 x i8> [[TMP6]] to <1 x double><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x double> [[TMP7]], double [[VMULXD_F64_I]], i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x double> [[TMP0]], double [[VMULXD_F64_I]], i32 0<br>
 // CHECK:   ret <1 x double> [[VSET_LANE]]<br>
 float64x1_t test_vmulx_laneq_f64_2() {<br>
       float64x1_t arg1;<br>
<br>
Modified: cfe/trunk/test/CodeGen/aarch64-neon-vget.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-neon-vget.c?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-neon-vget.c?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/aarch64-neon-vget.c (original)<br>
+++ cfe/trunk/test/CodeGen/aarch64-neon-vget.c Wed Oct  9 10:57:59 2019<br>
@@ -12,18 +12,14 @@ uint8_t test_vget_lane_u8(uint8x8_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: define i16 @test_vget_lane_u16(<4 x i16> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %a, i32 3<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 uint16_t test_vget_lane_u16(uint16x4_t a) {<br>
   return vget_lane_u16(a, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vget_lane_u32(<2 x i32> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> %a, i32 1<br>
 // CHECK:   ret i32 [[VGET_LANE]]<br>
 uint32_t test_vget_lane_u32(uint32x2_t a) {<br>
   return vget_lane_u32(a, 1);<br>
@@ -37,18 +33,14 @@ int8_t test_vget_lane_s8(int8x8_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: define i16 @test_vget_lane_s16(<4 x i16> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %a, i32 3<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 int16_t test_vget_lane_s16(int16x4_t a) {<br>
   return vget_lane_s16(a, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vget_lane_s32(<2 x i32> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> %a, i32 1<br>
 // CHECK:   ret i32 [[VGET_LANE]]<br>
 int32_t test_vget_lane_s32(int32x2_t a) {<br>
   return vget_lane_s32(a, 1);<br>
@@ -62,18 +54,14 @@ poly8_t test_vget_lane_p8(poly8x8_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: define i16 @test_vget_lane_p16(<4 x i16> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %a, i32 3<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 poly16_t test_vget_lane_p16(poly16x4_t a) {<br>
   return vget_lane_p16(a, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: define float @test_vget_lane_f32(<2 x float> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x float> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x float> %a, i32 1<br>
 // CHECK:   ret float [[VGET_LANE]]<br>
 float32_t test_vget_lane_f32(float32x2_t a) {<br>
   return vget_lane_f32(a, 1);<br>
@@ -85,9 +73,7 @@ float32_t test_vget_lane_f32(float32x2_t<br>
 // CHECK:   store <4 x half> %a, <4 x half>* [[__REINT_242]], align 8<br>
 // CHECK:   [[TMP0:%.*]] = bitcast <4 x half>* [[__REINT_242]] to <4 x i16>*<br>
 // CHECK:   [[TMP1:%.*]] = load <4 x i16>, <4 x i16>* [[TMP0]], align 8<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <4 x i16> [[TMP1]] to <8 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <8 x i8> [[TMP2]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP3]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 1<br>
 // CHECK:   store i16 [[VGET_LANE]], i16* [[__REINT1_242]], align 2<br>
 // CHECK:   [[TMP4:%.*]] = bitcast i16* [[__REINT1_242]] to half*<br>
 // CHECK:   [[TMP5:%.*]] = load half, half* [[TMP4]], align 2<br>
@@ -105,18 +91,14 @@ uint8_t test_vgetq_lane_u8(uint8x16_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: define i16 @test_vgetq_lane_u16(<8 x i16> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> %a, i32 7<br>
 // CHECK:   ret i16 [[VGETQ_LANE]]<br>
 uint16_t test_vgetq_lane_u16(uint16x8_t a) {<br>
   return vgetq_lane_u16(a, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vgetq_lane_u32(<4 x i32> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> %a, i32 3<br>
 // CHECK:   ret i32 [[VGETQ_LANE]]<br>
 uint32_t test_vgetq_lane_u32(uint32x4_t a) {<br>
   return vgetq_lane_u32(a, 3);<br>
@@ -130,18 +112,14 @@ int8_t test_vgetq_lane_s8(int8x16_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: define i16 @test_vgetq_lane_s16(<8 x i16> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> %a, i32 7<br>
 // CHECK:   ret i16 [[VGETQ_LANE]]<br>
 int16_t test_vgetq_lane_s16(int16x8_t a) {<br>
   return vgetq_lane_s16(a, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: define i32 @test_vgetq_lane_s32(<4 x i32> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> %a, i32 3<br>
 // CHECK:   ret i32 [[VGETQ_LANE]]<br>
 int32_t test_vgetq_lane_s32(int32x4_t a) {<br>
   return vgetq_lane_s32(a, 3);<br>
@@ -155,18 +133,14 @@ poly8_t test_vgetq_lane_p8(poly8x16_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: define i16 @test_vgetq_lane_p16(<8 x i16> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> %a, i32 7<br>
 // CHECK:   ret i16 [[VGETQ_LANE]]<br>
 poly16_t test_vgetq_lane_p16(poly16x8_t a) {<br>
   return vgetq_lane_p16(a, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: define float @test_vgetq_lane_f32(<4 x float> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x float> [[TMP1]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x float> %a, i32 3<br>
 // CHECK:   ret float [[VGETQ_LANE]]<br>
 float32_t test_vgetq_lane_f32(float32x4_t a) {<br>
   return vgetq_lane_f32(a, 3);<br>
@@ -178,9 +152,7 @@ float32_t test_vgetq_lane_f32(float32x4_<br>
 // CHECK:   store <8 x half> %a, <8 x half>* [[__REINT_244]], align 16<br>
 // CHECK:   [[TMP0:%.*]] = bitcast <8 x half>* [[__REINT_244]] to <8 x i16>*<br>
 // CHECK:   [[TMP1:%.*]] = load <8 x i16>, <8 x i16>* [[TMP0]], align 16<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <8 x i16> [[TMP1]] to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP3]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 3<br>
 // CHECK:   store i16 [[VGETQ_LANE]], i16* [[__REINT1_244]], align 2<br>
 // CHECK:   [[TMP4:%.*]] = bitcast i16* [[__REINT1_244]] to half*<br>
 // CHECK:   [[TMP5:%.*]] = load half, half* [[TMP4]], align 2<br>
@@ -191,36 +163,28 @@ float32_t test_vgetq_lane_f16(float16x8_<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vget_lane_s64(<1 x i64> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> [[TMP1]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> %a, i32 0<br>
 // CHECK:   ret i64 [[VGET_LANE]]<br>
 int64_t test_vget_lane_s64(int64x1_t a) {<br>
   return vget_lane_s64(a, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vget_lane_u64(<1 x i64> %a) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> [[TMP1]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> %a, i32 0<br>
 // CHECK:   ret i64 [[VGET_LANE]]<br>
 uint64_t test_vget_lane_u64(uint64x1_t a) {<br>
   return vget_lane_u64(a, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vgetq_lane_s64(<2 x i64> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> [[TMP1]], i32 1<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> %a, i32 1<br>
 // CHECK:   ret i64 [[VGETQ_LANE]]<br>
 int64_t test_vgetq_lane_s64(int64x2_t a) {<br>
   return vgetq_lane_s64(a, 1);<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vgetq_lane_u64(<2 x i64> %a) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> [[TMP1]], i32 1<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> %a, i32 1<br>
 // CHECK:   ret i64 [[VGETQ_LANE]]<br>
 uint64_t test_vgetq_lane_u64(uint64x2_t a) {<br>
   return vgetq_lane_u64(a, 1);<br>
@@ -235,18 +199,14 @@ uint8x8_t test_vset_lane_u8(uint8_t a, u<br>
 }<br>
<br>
 // CHECK-LABEL: define <4 x i16> @test_vset_lane_u16(i16 %a, <4 x i16> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> [[TMP1]], i16 %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> %b, i16 %a, i32 3<br>
 // CHECK:   ret <4 x i16> [[VSET_LANE]]<br>
 uint16x4_t test_vset_lane_u16(uint16_t a, uint16x4_t b) {<br>
   return vset_lane_u16(a, b, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: define <2 x i32> @test_vset_lane_u32(i32 %a, <2 x i32> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i32> [[TMP1]], i32 %a, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i32> %b, i32 %a, i32 1<br>
 // CHECK:   ret <2 x i32> [[VSET_LANE]]<br>
 uint32x2_t test_vset_lane_u32(uint32_t a, uint32x2_t b) {<br>
   return vset_lane_u32(a, b, 1);<br>
@@ -260,18 +220,14 @@ int8x8_t test_vset_lane_s8(int8_t a, int<br>
 }<br>
<br>
 // CHECK-LABEL: define <4 x i16> @test_vset_lane_s16(i16 %a, <4 x i16> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> [[TMP1]], i16 %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> %b, i16 %a, i32 3<br>
 // CHECK:   ret <4 x i16> [[VSET_LANE]]<br>
 int16x4_t test_vset_lane_s16(int16_t a, int16x4_t b) {<br>
   return vset_lane_s16(a, b, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: define <2 x i32> @test_vset_lane_s32(i32 %a, <2 x i32> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i32> [[TMP1]], i32 %a, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i32> %b, i32 %a, i32 1<br>
 // CHECK:   ret <2 x i32> [[VSET_LANE]]<br>
 int32x2_t test_vset_lane_s32(int32_t a, int32x2_t b) {<br>
   return vset_lane_s32(a, b, 1);<br>
@@ -285,18 +241,14 @@ poly8x8_t test_vset_lane_p8(poly8_t a, p<br>
 }<br>
<br>
 // CHECK-LABEL: define <4 x i16> @test_vset_lane_p16(i16 %a, <4 x i16> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> [[TMP1]], i16 %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> %b, i16 %a, i32 3<br>
 // CHECK:   ret <4 x i16> [[VSET_LANE]]<br>
 poly16x4_t test_vset_lane_p16(poly16_t a, poly16x4_t b) {<br>
   return vset_lane_p16(a, b, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: define <2 x float> @test_vset_lane_f32(float %a, <2 x float> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x float> [[TMP1]], float %a, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x float> %b, float %a, i32 1<br>
 // CHECK:   ret <2 x float> [[VSET_LANE]]<br>
 float32x2_t test_vset_lane_f32(float32_t a, float32x2_t b) {<br>
   return vset_lane_f32(a, b, 1);<br>
@@ -313,9 +265,7 @@ float32x2_t test_vset_lane_f32(float32_t<br>
 // CHECK:   [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 2<br>
 // CHECK:   [[TMP3:%.*]] = bitcast <4 x half>* [[__REINT1_246]] to <4 x i16>*<br>
 // CHECK:   [[TMP4:%.*]] = load <4 x i16>, <4 x i16>* [[TMP3]], align 8<br>
-// CHECK:   [[TMP5:%.*]] = bitcast <4 x i16> [[TMP4]] to <8 x i8><br>
-// CHECK:   [[TMP6:%.*]] = bitcast <8 x i8> [[TMP5]] to <4 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> [[TMP6]], i16 [[TMP2]], i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> [[TMP4]], i16 [[TMP2]], i32 3<br>
 // CHECK:   store <4 x i16> [[VSET_LANE]], <4 x i16>* [[__REINT2_246]], align 8<br>
 // CHECK:   [[TMP7:%.*]] = bitcast <4 x i16>* [[__REINT2_246]] to <4 x half>*<br>
 // CHECK:   [[TMP8:%.*]] = load <4 x half>, <4 x half>* [[TMP7]], align 8<br>
@@ -332,18 +282,14 @@ uint8x16_t test_vsetq_lane_u8(uint8_t a,<br>
 }<br>
<br>
 // CHECK-LABEL: define <8 x i16> @test_vsetq_lane_u16(i16 %a, <8 x i16> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP1]], i16 %a, i32 7<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> %b, i16 %a, i32 7<br>
 // CHECK:   ret <8 x i16> [[VSET_LANE]]<br>
 uint16x8_t test_vsetq_lane_u16(uint16_t a, uint16x8_t b) {<br>
   return vsetq_lane_u16(a, b, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: define <4 x i32> @test_vsetq_lane_u32(i32 %a, <4 x i32> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> [[TMP1]], i32 %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> %b, i32 %a, i32 3<br>
 // CHECK:   ret <4 x i32> [[VSET_LANE]]<br>
 uint32x4_t test_vsetq_lane_u32(uint32_t a, uint32x4_t b) {<br>
   return vsetq_lane_u32(a, b, 3);<br>
@@ -357,18 +303,14 @@ int8x16_t test_vsetq_lane_s8(int8_t a, i<br>
 }<br>
<br>
 // CHECK-LABEL: define <8 x i16> @test_vsetq_lane_s16(i16 %a, <8 x i16> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP1]], i16 %a, i32 7<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> %b, i16 %a, i32 7<br>
 // CHECK:   ret <8 x i16> [[VSET_LANE]]<br>
 int16x8_t test_vsetq_lane_s16(int16_t a, int16x8_t b) {<br>
   return vsetq_lane_s16(a, b, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: define <4 x i32> @test_vsetq_lane_s32(i32 %a, <4 x i32> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> [[TMP1]], i32 %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> %b, i32 %a, i32 3<br>
 // CHECK:   ret <4 x i32> [[VSET_LANE]]<br>
 int32x4_t test_vsetq_lane_s32(int32_t a, int32x4_t b) {<br>
   return vsetq_lane_s32(a, b, 3);<br>
@@ -382,18 +324,14 @@ poly8x16_t test_vsetq_lane_p8(poly8_t a,<br>
 }<br>
<br>
 // CHECK-LABEL: define <8 x i16> @test_vsetq_lane_p16(i16 %a, <8 x i16> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP1]], i16 %a, i32 7<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> %b, i16 %a, i32 7<br>
 // CHECK:   ret <8 x i16> [[VSET_LANE]]<br>
 poly16x8_t test_vsetq_lane_p16(poly16_t a, poly16x8_t b) {<br>
   return vsetq_lane_p16(a, b, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: define <4 x float> @test_vsetq_lane_f32(float %a, <4 x float> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x float> [[TMP1]], float %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x float> %b, float %a, i32 3<br>
 // CHECK:   ret <4 x float> [[VSET_LANE]]<br>
 float32x4_t test_vsetq_lane_f32(float32_t a, float32x4_t b) {<br>
   return vsetq_lane_f32(a, b, 3);<br>
@@ -410,9 +348,7 @@ float32x4_t test_vsetq_lane_f32(float32_<br>
 // CHECK:   [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 2<br>
 // CHECK:   [[TMP3:%.*]] = bitcast <8 x half>* [[__REINT1_248]] to <8 x i16>*<br>
 // CHECK:   [[TMP4:%.*]] = load <8 x i16>, <8 x i16>* [[TMP3]], align 16<br>
-// CHECK:   [[TMP5:%.*]] = bitcast <8 x i16> [[TMP4]] to <16 x i8><br>
-// CHECK:   [[TMP6:%.*]] = bitcast <16 x i8> [[TMP5]] to <8 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP6]], i16 [[TMP2]], i32 7<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP4]], i16 [[TMP2]], i32 7<br>
 // CHECK:   store <8 x i16> [[VSET_LANE]], <8 x i16>* [[__REINT2_248]], align 16<br>
 // CHECK:   [[TMP7:%.*]] = bitcast <8 x i16>* [[__REINT2_248]] to <8 x half>*<br>
 // CHECK:   [[TMP8:%.*]] = load <8 x half>, <8 x half>* [[TMP7]], align 16<br>
@@ -422,36 +358,28 @@ float16x8_t test_vsetq_lane_f16(float16_<br>
 }<br>
<br>
 // CHECK-LABEL: define <1 x i64> @test_vset_lane_s64(i64 %a, <1 x i64> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> [[TMP1]], i64 %a, i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> %b, i64 %a, i32 0<br>
 // CHECK:   ret <1 x i64> [[VSET_LANE]]<br>
 int64x1_t test_vset_lane_s64(int64_t a, int64x1_t b) {<br>
   return vset_lane_s64(a, b, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: define <1 x i64> @test_vset_lane_u64(i64 %a, <1 x i64> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> [[TMP1]], i64 %a, i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> %b, i64 %a, i32 0<br>
 // CHECK:   ret <1 x i64> [[VSET_LANE]]<br>
 uint64x1_t test_vset_lane_u64(uint64_t a, uint64x1_t b) {<br>
   return vset_lane_u64(a, b, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: define <2 x i64> @test_vsetq_lane_s64(i64 %a, <2 x i64> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> [[TMP1]], i64 %a, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> %b, i64 %a, i32 1<br>
 // CHECK:   ret <2 x i64> [[VSET_LANE]]<br>
 int64x2_t test_vsetq_lane_s64(int64_t a, int64x2_t b) {<br>
   return vsetq_lane_s64(a, b, 1);<br>
 }<br>
<br>
 // CHECK-LABEL: define <2 x i64> @test_vsetq_lane_u64(i64 %a, <2 x i64> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> [[TMP1]], i64 %a, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> %b, i64 %a, i32 1<br>
 // CHECK:   ret <2 x i64> [[VSET_LANE]]<br>
 uint64x2_t test_vsetq_lane_u64(uint64_t a, uint64x2_t b) {<br>
   return vsetq_lane_u64(a, b, 1);<br>
<br>
Modified: cfe/trunk/test/CodeGen/aarch64-poly64.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-poly64.c?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-poly64.c?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/aarch64-poly64.c (original)<br>
+++ cfe/trunk/test/CodeGen/aarch64-poly64.c Wed Oct  9 10:57:59 2019<br>
@@ -61,48 +61,36 @@ poly64x2_t test_vbslq_p64(poly64x2_t a,<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vget_lane_p64(<1 x i64> %v) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %v to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> [[TMP1]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> %v, i32 0<br>
 // CHECK:   ret i64 [[VGET_LANE]]<br>
 poly64_t test_vget_lane_p64(poly64x1_t v) {<br>
   return vget_lane_p64(v, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: define i64 @test_vgetq_lane_p64(<2 x i64> %v) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %v to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> [[TMP1]], i32 1<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> %v, i32 1<br>
 // CHECK:   ret i64 [[VGETQ_LANE]]<br>
 poly64_t test_vgetq_lane_p64(poly64x2_t v) {<br>
   return vgetq_lane_p64(v, 1);<br>
 }<br>
<br>
 // CHECK-LABEL: define <1 x i64> @test_vset_lane_p64(i64 %a, <1 x i64> %v) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %v to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> [[TMP1]], i64 %a, i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> %v, i64 %a, i32 0<br>
 // CHECK:   ret <1 x i64> [[VSET_LANE]]<br>
 poly64x1_t test_vset_lane_p64(poly64_t a, poly64x1_t v) {<br>
   return vset_lane_p64(a, v, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: define <2 x i64> @test_vsetq_lane_p64(i64 %a, <2 x i64> %v) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %v to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> [[TMP1]], i64 %a, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> %v, i64 %a, i32 1<br>
 // CHECK:   ret <2 x i64> [[VSET_LANE]]<br>
 poly64x2_t test_vsetq_lane_p64(poly64_t a, poly64x2_t v) {<br>
   return vsetq_lane_p64(a, v, 1);<br>
 }<br>
<br>
 // CHECK-LABEL: define <1 x i64> @test_vcopy_lane_p64(<1 x i64> %a, <1 x i64> %b) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> [[TMP1]], i32 0<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <1 x i64> %a to <8 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <8 x i8> [[TMP2]] to <1 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> [[TMP3]], i64 [[VGET_LANE]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> %b, i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> %a, i64 [[VGET_LANE]], i32 0<br>
 // CHECK:   ret <1 x i64> [[VSET_LANE]]<br>
 poly64x1_t test_vcopy_lane_p64(poly64x1_t a, poly64x1_t b) {<br>
   return vcopy_lane_p64(a, 0, b, 0);<br>
@@ -110,24 +98,16 @@ poly64x1_t test_vcopy_lane_p64(poly64x1_<br>
 }<br>
<br>
 // CHECK-LABEL: define <2 x i64> @test_vcopyq_lane_p64(<2 x i64> %a, <1 x i64> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> [[TMP1]], i32 0<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <2 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> [[TMP3]], i64 [[VGET_LANE]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> %b, i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> %a, i64 [[VGET_LANE]], i32 1<br>
 // CHECK:   ret <2 x i64> [[VSET_LANE]]<br>
 poly64x2_t test_vcopyq_lane_p64(poly64x2_t a, poly64x1_t b) {<br>
   return vcopyq_lane_p64(a, 1, b, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: define <2 x i64> @test_vcopyq_laneq_p64(<2 x i64> %a, <2 x i64> %b) #1 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> [[TMP1]], i32 1<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <2 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> [[TMP3]], i64 [[VGETQ_LANE]], i32 1<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> %b, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> %a, i64 [[VGETQ_LANE]], i32 1<br>
 // CHECK:   ret <2 x i64> [[VSET_LANE]]<br>
 poly64x2_t test_vcopyq_laneq_p64(poly64x2_t a, poly64x2_t b) {<br>
   return vcopyq_laneq_p64(a, 1, b, 1);<br>
<br>
Modified: cfe/trunk/test/CodeGen/aarch64-v8.2a-neon-intrinsics.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-v8.2a-neon-intrinsics.c?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/aarch64-v8.2a-neon-intrinsics.c?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/aarch64-v8.2a-neon-intrinsics.c (original)<br>
+++ cfe/trunk/test/CodeGen/aarch64-v8.2a-neon-intrinsics.c Wed Oct  9 10:57:59 2019<br>
@@ -960,9 +960,7 @@ float16x8_t test_vfmaq_n_f16(float16x8_t<br>
 }<br>
<br>
 // CHECK-LABEL: test_vfmah_lane_f16<br>
-// CHECK: [[TMP0:%.*]] = bitcast <4 x half> %c to <8 x i8><br>
-// CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x half><br>
-// CHECK: [[EXTR:%.*]] = extractelement <4 x half> [[TMP1]], i32 3<br>
+// CHECK: [[EXTR:%.*]] = extractelement <4 x half> %c, i32 3<br>
 // CHECK: [[FMA:%.*]]  = call half @llvm.fma.f16(half %b, half [[EXTR]], half %a)<br>
 // CHECK: ret half [[FMA]]<br>
 float16_t test_vfmah_lane_f16(float16_t a, float16_t b, float16x4_t c) {<br>
@@ -970,9 +968,7 @@ float16_t test_vfmah_lane_f16(float16_t<br>
 }<br>
<br>
 // CHECK-LABEL: test_vfmah_laneq_f16<br>
-// CHECK: [[TMP0:%.*]] = bitcast <8 x half> %c to <16 x i8><br>
-// CHECK: [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x half><br>
-// CHECK: [[EXTR:%.*]] = extractelement <8 x half> [[TMP1]], i32 7<br>
+// CHECK: [[EXTR:%.*]] = extractelement <8 x half> %c, i32 7<br>
 // CHECK: [[FMA:%.*]]  = call half @llvm.fma.f16(half %b, half [[EXTR]], half %a)<br>
 // CHECK: ret half [[FMA]]<br>
 float16_t test_vfmah_laneq_f16(float16_t a, float16_t b, float16x8_t c) {<br>
@@ -1071,9 +1067,7 @@ float16x8_t test_vfmsq_n_f16(float16x8_t<br>
 // CHECK: [[TMP0:%.*]] = fpext half %b to float<br>
 // CHECK: [[TMP1:%.*]] = fsub float -0.000000e+00, [[TMP0]]<br>
 // CHECK: [[SUB:%.*]]  = fptrunc float [[TMP1]] to half<br>
-// CHECK: [[TMP2:%.*]] = bitcast <4 x half> %c to <8 x i8><br>
-// CHECK: [[TMP3:%.*]] = bitcast <8 x i8> [[TMP2]] to <4 x half><br>
-// CHECK: [[EXTR:%.*]] = extractelement <4 x half> [[TMP3]], i32 3<br>
+// CHECK: [[EXTR:%.*]] = extractelement <4 x half> %c, i32 3<br>
 // CHECK: [[FMA:%.*]]  = call half @llvm.fma.f16(half [[SUB]], half [[EXTR]], half %a)<br>
 // CHECK: ret half [[FMA]]<br>
 float16_t test_vfmsh_lane_f16(float16_t a, float16_t b, float16x4_t c) {<br>
@@ -1084,9 +1078,7 @@ float16_t test_vfmsh_lane_f16(float16_t<br>
 // CHECK: [[TMP0:%.*]] = fpext half %b to float<br>
 // CHECK: [[TMP1:%.*]] = fsub float -0.000000e+00, [[TMP0]]<br>
 // CHECK: [[SUB:%.*]]  = fptrunc float [[TMP1]] to half<br>
-// CHECK: [[TMP2:%.*]] = bitcast <8 x half> %c to <16 x i8><br>
-// CHECK: [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <8 x half><br>
-// CHECK: [[EXTR:%.*]] = extractelement <8 x half> [[TMP3]], i32 7<br>
+// CHECK: [[EXTR:%.*]] = extractelement <8 x half> %c, i32 7<br>
 // CHECK: [[FMA:%.*]]  = call half @llvm.fma.f16(half [[SUB]], half [[EXTR]], half %a)<br>
 // CHECK: ret half [[FMA]]<br>
 float16_t test_vfmsh_laneq_f16(float16_t a, float16_t b, float16x8_t c) {<br>
@@ -1231,9 +1223,7 @@ float16x8_t test_vmulxq_n_f16(float16x8_<br>
 }<br>
<br>
 // CHECK-LABEL: test_vmulxh_lane_f16<br>
-// CHECK: [[TMP0:%.*]] = bitcast <4 x half> %b to <8 x i8><br>
-// CHECK: [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x half><br>
-// CHECK: [[EXTR:%.*]] = extractelement <4 x half> [[TMP1]], i32 3<br>
+// CHECK: [[EXTR:%.*]] = extractelement <4 x half> %b, i32 3<br>
 // CHECK: [[MULX:%.*]] = call half @llvm.aarch64.neon.fmulx.f16(half %a, half [[EXTR]]<br>
 // CHECK: ret half [[MULX]]<br>
 float16_t test_vmulxh_lane_f16(float16_t a, float16x4_t b) {<br>
@@ -1241,9 +1231,7 @@ float16_t test_vmulxh_lane_f16(float16_t<br>
 }<br>
<br>
 // CHECK-LABEL: test_vmulxh_laneq_f16<br>
-// CHECK: [[TMP0:%.*]] = bitcast <8 x half> %b to <16 x i8><br>
-// CHECK: [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x half><br>
-// CHECK: [[EXTR:%.*]] = extractelement <8 x half> [[TMP1]], i32 7<br>
+// CHECK: [[EXTR:%.*]] = extractelement <8 x half> %b, i32 7<br>
 // CHECK: [[MULX:%.*]] = call half @llvm.aarch64.neon.fmulx.f16(half %a, half [[EXTR]])<br>
 // CHECK: ret half [[MULX]]<br>
 float16_t test_vmulxh_laneq_f16(float16_t a, float16x8_t b) {<br>
<br>
Modified: cfe/trunk/test/CodeGen/arm64-lanes.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm64-lanes.c?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm64-lanes.c?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/arm64-lanes.c (original)<br>
+++ cfe/trunk/test/CodeGen/arm64-lanes.c Wed Oct  9 10:57:59 2019<br>
@@ -9,7 +9,7 @@ int8_t test_vdupb_lane_s8(int8x8_t src)<br>
   // CHECK: extractelement <8 x i8> %src, i32 2<br>
<br>
   // CHECK-BE-LABEL: @test_vdupb_lane_s8<br>
-  // CHECK-BE: [[REV:%.*]] = shufflevector <8 x i8> {{.*}}, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0><br>
+  // CHECK-BE: [[REV:%.*]] = shufflevector <8 x i8> %src, <8 x i8> %src, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0><br>
   // CHECK-BE: extractelement <8 x i8> [[REV]], i32 2<br>
 }<br>
<br>
@@ -19,109 +19,83 @@ uint8_t test_vdupb_lane_u8(uint8x8_t src<br>
   // CHECK: extractelement <8 x i8> %src, i32 2<br>
<br>
   // CHECK-BE-LABEL: @test_vdupb_lane_u8<br>
-  // CHECK-BE: [[REV:%.*]] = shufflevector <8 x i8> {{.*}}, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0><br>
+  // CHECK-BE: [[REV:%.*]] = shufflevector <8 x i8> %src, <8 x i8> %src, <8 x i32> <i32 7, i32 6, i32 5, i32 4, i32 3, i32 2, i32 1, i32 0><br>
   // CHECK-BE: extractelement <8 x i8> [[REV]], i32 2<br>
 }<br>
<br>
 int16_t test_vduph_lane_s16(int16x4_t src) {<br>
   return vduph_lane_s16(src, 2);<br>
   // CHECK-LABEL: @test_vduph_lane_s16<br>
-  // CHECK: [[TMP1:%.*]] = bitcast <4 x i16> %src to [[TYPE:.*]]<br>
-  // CHECK: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <4 x i16><br>
-  // CHECK: extractelement <4 x i16> [[TMP2]], i32 2<br>
+  // CHECK: extractelement <4 x i16> %src, i32 2<br>
<br>
   // CHECK-BE-LABEL: @test_vduph_lane_s16<br>
-  // CHECK-BE: [[REV:%.*]] = shufflevector <4 x i16> {{.*}}, <4 x i32> <i32 3, i32 2, i32 1, i32 0><br>
-  // CHECK-BE: [[TMP1:%.*]] = bitcast <4 x i16> [[REV]] to [[TYPE:.*]]<br>
-  // CHECK-BE: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <4 x i16><br>
-  // CHECK-BE: extractelement <4 x i16> [[TMP2]], i32 2<br>
+  // CHECK-BE: [[REV:%.*]] = shufflevector <4 x i16> %src, <4 x i16> %src, <4 x i32> <i32 3, i32 2, i32 1, i32 0><br>
+  // CHECK-BE: extractelement <4 x i16> [[REV]], i32 2<br>
 }<br>
<br>
 uint16_t test_vduph_lane_u16(uint16x4_t src) {<br>
   return vduph_lane_u16(src, 2);<br>
   // CHECK-LABEL: @test_vduph_lane_u16<br>
-  // CHECK: [[TMP1:%.*]] = bitcast <4 x i16> %src to [[TYPE:.*]]<br>
-  // CHECK: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <4 x i16><br>
-  // CHECK: extractelement <4 x i16> [[TMP2]], i32 2<br>
+  // CHECK: extractelement <4 x i16> %src, i32 2<br>
<br>
   // CHECK-BE-LABEL: @test_vduph_lane_u16<br>
-  // CHECK-BE: [[REV:%.*]] = shufflevector <4 x i16> {{.*}}, <4 x i32> <i32 3, i32 2, i32 1, i32 0><br>
-  // CHECK-BE: [[TMP1:%.*]] = bitcast <4 x i16> [[REV]] to [[TYPE:.*]]<br>
-  // CHECK-BE: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <4 x i16><br>
-  // CHECK-BE: extractelement <4 x i16> [[TMP2]], i32 2<br>
+  // CHECK-BE: [[REV:%.*]] = shufflevector <4 x i16> %src, <4 x i16> %src, <4 x i32> <i32 3, i32 2, i32 1, i32 0><br>
+  // CHECK-BE: extractelement <4 x i16> [[REV]], i32 2<br>
 }<br>
<br>
 int32_t test_vdups_lane_s32(int32x2_t src) {<br>
   return vdups_lane_s32(src, 0);<br>
   // CHECK-LABEL: @test_vdups_lane_s32<br>
-  // CHECK: [[TMP1:%.*]] = bitcast <2 x i32> %src to [[TYPE:.*]]<br>
-  // CHECK: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <2 x i32><br>
-  // CHECK: extractelement <2 x i32> [[TMP2]], i32 0<br>
+  // CHECK: extractelement <2 x i32> %src, i32 0<br>
<br>
   // CHECK-BE-LABEL: @test_vdups_lane_s32<br>
-  // CHECK-BE: [[REV:%.*]] = shufflevector <2 x i32> {{.*}}, <2 x i32> <i32 1, i32 0><br>
-  // CHECK-BE: [[TMP1:%.*]] = bitcast <2 x i32> [[REV]] to [[TYPE:.*]]<br>
-  // CHECK-BE: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <2 x i32><br>
-  // CHECK-BE: extractelement <2 x i32> [[TMP2]], i32 0<br>
+  // CHECK-BE: [[REV:%.*]] = shufflevector <2 x i32> %src, <2 x i32> %src, <2 x i32> <i32 1, i32 0><br>
+  // CHECK-BE: extractelement <2 x i32> [[REV]], i32 0<br>
 }<br>
<br>
 uint32_t test_vdups_lane_u32(uint32x2_t src) {<br>
   return vdups_lane_u32(src, 0);<br>
   // CHECK-LABEL: @test_vdups_lane_u32<br>
-  // CHECK: [[TMP1:%.*]] = bitcast <2 x i32> %src to [[TYPE:.*]]<br>
-  // CHECK: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <2 x i32><br>
-  // CHECK: extractelement <2 x i32> [[TMP2]], i32 0<br>
+  // CHECK: extractelement <2 x i32> %src, i32 0<br>
<br>
   // CHECK-BE-LABEL: @test_vdups_lane_u32<br>
-  // CHECK-BE: [[REV:%.*]] = shufflevector <2 x i32> {{.*}}, <2 x i32> <i32 1, i32 0><br>
-  // CHECK-BE: [[TMP1:%.*]] = bitcast <2 x i32> [[REV]] to [[TYPE:.*]]<br>
-  // CHECK-BE: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <2 x i32><br>
-  // CHECK-BE: extractelement <2 x i32> [[TMP2]], i32 0<br>
+  // CHECK-BE: [[REV:%.*]] = shufflevector <2 x i32> %src, <2 x i32> %src, <2 x i32> <i32 1, i32 0><br>
+  // CHECK-BE: extractelement <2 x i32> [[REV]], i32 0<br>
 }<br>
<br>
 float32_t test_vdups_lane_f32(float32x2_t src) {<br>
   return vdups_lane_f32(src, 0);<br>
   // CHECK-LABEL: @test_vdups_lane_f32<br>
-  // CHECK: [[TMP1:%.*]] = bitcast <2 x float> %src to [[TYPE:.*]]<br>
-  // CHECK: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <2 x float><br>
-  // CHECK: extractelement <2 x float> [[TMP2]], i32 0<br>
+  // CHECK: extractelement <2 x float> %src, i32 0<br>
<br>
   // CHECK-BE-LABEL: @test_vdups_lane_f32<br>
-  // CHECK-BE: [[REV:%.*]] = shufflevector <2 x float> {{.*}}, <2 x i32> <i32 1, i32 0><br>
-  // CHECK-BE: [[TMP1:%.*]] = bitcast <2 x float> [[REV]] to [[TYPE:.*]]<br>
-  // CHECK-BE: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <2 x float><br>
-  // CHECK-BE: extractelement <2 x float> [[TMP2]], i32 0<br>
+  // CHECK-BE: [[REV:%.*]] = shufflevector <2 x float> %src, <2 x float> %src, <2 x i32> <i32 1, i32 0><br>
+  // CHECK-BE: extractelement <2 x float> [[REV]], i32 0<br>
 }<br>
<br>
 int64_t test_vdupd_lane_s64(int64x1_t src) {<br>
   return vdupd_lane_s64(src, 0);<br>
   // CHECK-LABEL: @test_vdupd_lane_s64<br>
-  // CHECK: [[TMP1:%.*]] = bitcast <1 x i64> %src to [[TYPE:.*]]<br>
-  // CHECK: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <1 x i64><br>
-  // CHECK: extractelement <1 x i64> [[TMP2]], i32 0<br>
+  // CHECK: extractelement <1 x i64> %src, i32 0<br>
<br>
   // CHECK-BE-LABEL: @test_vdupd_lane_s64<br>
-  // CHECK-BE: extractelement <1 x i64> {{.*}}, i32 0<br>
+  // CHECK-BE: extractelement <1 x i64> %src, i32 0<br>
 }<br>
<br>
 uint64_t test_vdupd_lane_u64(uint64x1_t src) {<br>
   return vdupd_lane_u64(src, 0);<br>
   // CHECK-LABEL: @test_vdupd_lane_u64<br>
-  // CHECK: [[TMP1:%.*]] = bitcast <1 x i64> %src to [[TYPE:.*]]<br>
-  // CHECK: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <1 x i64><br>
-  // CHECK: extractelement <1 x i64> [[TMP2]], i32 0<br>
+  // CHECK: extractelement <1 x i64> %src, i32 0<br>
<br>
   // CHECK-BE-LABEL: @test_vdupd_lane_u64<br>
-  // CHECK-BE: extractelement <1 x i64> {{.*}}, i32 0<br>
+  // CHECK-BE: extractelement <1 x i64> %src, i32 0<br>
 }<br>
<br>
 float64_t test_vdupd_lane_f64(float64x1_t src) {<br>
   return vdupd_lane_f64(src, 0);<br>
   // CHECK-LABEL: @test_vdupd_lane_f64<br>
-  // CHECK: [[TMP1:%.*]] = bitcast <1 x double> %src to [[TYPE:.*]]<br>
-  // CHECK: [[TMP2:%.*]] = bitcast [[TYPE]] [[TMP1]] to <1 x double><br>
-  // CHECK: extractelement <1 x double> [[TMP2]], i32 0<br>
+  // CHECK: extractelement <1 x double> %src, i32 0<br>
<br>
   // CHECK-BE-LABEL: @test_vdupd_lane_f64<br>
-  // CHECK-BE: extractelement <1 x double> {{.*}}, i32 0<br>
+  // CHECK-BE: extractelement <1 x double> %src, i32 0<br>
 }<br>
<br>
Modified: cfe/trunk/test/CodeGen/arm64_vcopy.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm64_vcopy.c?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm64_vcopy.c?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/arm64_vcopy.c (original)<br>
+++ cfe/trunk/test/CodeGen/arm64_vcopy.c Wed Oct  9 10:57:59 2019<br>
@@ -22,12 +22,8 @@ uint8x16_t test_vcopyq_laneq_u8(uint8x16<br>
 }<br>
<br>
 // CHECK-LABEL: define <8 x i16> @test_vcopyq_laneq_s16(<8 x i16> %a1, <8 x i16> %a2) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a2 to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <8 x i16> %a1 to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <8 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP3]], i16 [[VGETQ_LANE]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> %a2, i32 7<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> %a1, i16 [[VGETQ_LANE]], i32 3<br>
 // CHECK:   ret <8 x i16> [[VSET_LANE]]<br>
 int16x8_t test_vcopyq_laneq_s16(int16x8_t a1, int16x8_t a2) {<br>
   return vcopyq_laneq_s16(a1, (int64_t) 3, a2, (int64_t) 7);<br>
@@ -35,12 +31,8 @@ int16x8_t test_vcopyq_laneq_s16(int16x8_<br>
 }<br>
<br>
 // CHECK-LABEL: define <8 x i16> @test_vcopyq_laneq_u16(<8 x i16> %a1, <8 x i16> %a2) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a2 to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <8 x i16> %a1 to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <8 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP3]], i16 [[VGETQ_LANE]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <8 x i16> %a2, i32 7<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> %a1, i16 [[VGETQ_LANE]], i32 3<br>
 // CHECK:   ret <8 x i16> [[VSET_LANE]]<br>
 uint16x8_t test_vcopyq_laneq_u16(uint16x8_t a1, uint16x8_t a2) {<br>
   return vcopyq_laneq_u16(a1, (int64_t) 3, a2, (int64_t) 7);<br>
@@ -48,72 +40,48 @@ uint16x8_t test_vcopyq_laneq_u16(uint16x<br>
 }<br>
<br>
 // CHECK-LABEL: define <4 x i32> @test_vcopyq_laneq_s32(<4 x i32> %a1, <4 x i32> %a2) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a2 to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <4 x i32> %a1 to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <4 x i32><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> [[TMP3]], i32 [[VGETQ_LANE]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> %a2, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> %a1, i32 [[VGETQ_LANE]], i32 3<br>
 // CHECK:   ret <4 x i32> [[VSET_LANE]]<br>
 int32x4_t test_vcopyq_laneq_s32(int32x4_t a1, int32x4_t a2) {<br>
   return vcopyq_laneq_s32(a1, (int64_t) 3, a2, (int64_t) 3);<br>
 }<br>
<br>
 // CHECK-LABEL: define <4 x i32> @test_vcopyq_laneq_u32(<4 x i32> %a1, <4 x i32> %a2) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a2 to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <4 x i32> %a1 to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <4 x i32><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> [[TMP3]], i32 [[VGETQ_LANE]], i32 3<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x i32> %a2, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> %a1, i32 [[VGETQ_LANE]], i32 3<br>
 // CHECK:   ret <4 x i32> [[VSET_LANE]]<br>
 uint32x4_t test_vcopyq_laneq_u32(uint32x4_t a1, uint32x4_t a2) {<br>
   return vcopyq_laneq_u32(a1, (int64_t) 3, a2, (int64_t) 3);<br>
 }<br>
<br>
 // CHECK-LABEL: define <2 x i64> @test_vcopyq_laneq_s64(<2 x i64> %a1, <2 x i64> %a2) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a2 to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> [[TMP1]], i32 1<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <2 x i64> %a1 to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <2 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> [[TMP3]], i64 [[VGETQ_LANE]], i32 0<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> %a2, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> %a1, i64 [[VGETQ_LANE]], i32 0<br>
 // CHECK:   ret <2 x i64> [[VSET_LANE]]<br>
 int64x2_t test_vcopyq_laneq_s64(int64x2_t a1, int64x2_t a2) {<br>
   return vcopyq_laneq_s64(a1, (int64_t) 0, a2, (int64_t) 1);<br>
 }<br>
<br>
 // CHECK-LABEL: define <2 x i64> @test_vcopyq_laneq_u64(<2 x i64> %a1, <2 x i64> %a2) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a2 to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> [[TMP1]], i32 1<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <2 x i64> %a1 to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <2 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> [[TMP3]], i64 [[VGETQ_LANE]], i32 0<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x i64> %a2, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> %a1, i64 [[VGETQ_LANE]], i32 0<br>
 // CHECK:   ret <2 x i64> [[VSET_LANE]]<br>
 uint64x2_t test_vcopyq_laneq_u64(uint64x2_t a1, uint64x2_t a2) {<br>
   return vcopyq_laneq_u64(a1, (int64_t) 0, a2, (int64_t) 1);<br>
 }<br>
<br>
 // CHECK-LABEL: define <4 x float> @test_vcopyq_laneq_f32(<4 x float> %a1, <4 x float> %a2) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a2 to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x float> [[TMP1]], i32 3<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <4 x float> %a1 to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <4 x float><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x float> [[TMP3]], float [[VGETQ_LANE]], i32 0<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <4 x float> %a2, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x float> %a1, float [[VGETQ_LANE]], i32 0<br>
 // CHECK:   ret <4 x float> [[VSET_LANE]]<br>
 float32x4_t test_vcopyq_laneq_f32(float32x4_t a1, float32x4_t a2) {<br>
   return vcopyq_laneq_f32(a1, 0, a2, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: define <2 x double> @test_vcopyq_laneq_f64(<2 x double> %a1, <2 x double> %a2) #0 {<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x double> %a2 to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x double><br>
-// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> [[TMP1]], i32 1<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <2 x double> %a1 to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <2 x double><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x double> [[TMP3]], double [[VGETQ_LANE]], i32 0<br>
+// CHECK:   [[VGETQ_LANE:%.*]] = extractelement <2 x double> %a2, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x double> %a1, double [[VGETQ_LANE]], i32 0<br>
 // CHECK:   ret <2 x double> [[VSET_LANE]]<br>
 float64x2_t test_vcopyq_laneq_f64(float64x2_t a1, float64x2_t a2) {<br>
   return vcopyq_laneq_f64(a1, 0, a2, 1);<br>
<br>
Modified: cfe/trunk/test/CodeGen/arm_neon_intrinsics.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm_neon_intrinsics.c?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/arm_neon_intrinsics.c?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/arm_neon_intrinsics.c (original)<br>
+++ cfe/trunk/test/CodeGen/arm_neon_intrinsics.c Wed Oct  9 10:57:59 2019<br>
@@ -3319,18 +3319,14 @@ uint8_t test_vget_lane_u8(uint8x8_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vget_lane_u16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %a, i32 3<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 uint16_t test_vget_lane_u16(uint16x4_t a) {<br>
   return vget_lane_u16(a, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vget_lane_u32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> %a, i32 1<br>
 // CHECK:   ret i32 [[VGET_LANE]]<br>
 uint32_t test_vget_lane_u32(uint32x2_t a) {<br>
   return vget_lane_u32(a, 1);<br>
@@ -3344,18 +3340,14 @@ int8_t test_vget_lane_s8(int8x8_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vget_lane_s16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %a, i32 3<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 int16_t test_vget_lane_s16(int16x4_t a) {<br>
   return vget_lane_s16(a, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vget_lane_s32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i32> %a, i32 1<br>
 // CHECK:   ret i32 [[VGET_LANE]]<br>
 int32_t test_vget_lane_s32(int32x2_t a) {<br>
   return vget_lane_s32(a, 1);<br>
@@ -3369,18 +3361,14 @@ poly8_t test_vget_lane_p8(poly8x8_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vget_lane_p16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> %a, i32 3<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 poly16_t test_vget_lane_p16(poly16x4_t a) {<br>
   return vget_lane_p16(a, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vget_lane_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x float> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x float> %a, i32 1<br>
 // CHECK:   ret float [[VGET_LANE]]<br>
 float32_t test_vget_lane_f32(float32x2_t a) {<br>
   return vget_lane_f32(a, 1);<br>
@@ -3392,9 +3380,7 @@ float32_t test_vget_lane_f32(float32x2_t<br>
 // CHECK:   store <4 x half> %a, <4 x half>* [[__REINT_242]], align 8<br>
 // CHECK:   [[TMP0:%.*]] = bitcast <4 x half>* [[__REINT_242]] to <4 x i16>*<br>
 // CHECK:   [[TMP1:%.*]] = load <4 x i16>, <4 x i16>* [[TMP0]], align 8<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <4 x i16> [[TMP1]] to <8 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <8 x i8> [[TMP2]] to <4 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP3]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i16> [[TMP1]], i32 1<br>
 // CHECK:   store i16 [[VGET_LANE]], i16* [[__REINT1_242]], align 2<br>
 // CHECK:   [[TMP4:%.*]] = bitcast i16* [[__REINT1_242]] to half*<br>
 // CHECK:   [[TMP5:%.*]] = load half, half* [[TMP4]], align 2<br>
@@ -3412,18 +3398,14 @@ uint8_t test_vgetq_lane_u8(uint8x16_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vgetq_lane_u16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <8 x i16> %a, i32 7<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 uint16_t test_vgetq_lane_u16(uint16x8_t a) {<br>
   return vgetq_lane_u16(a, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vgetq_lane_u32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i32> %a, i32 3<br>
 // CHECK:   ret i32 [[VGET_LANE]]<br>
 uint32_t test_vgetq_lane_u32(uint32x4_t a) {<br>
   return vgetq_lane_u32(a, 3);<br>
@@ -3437,18 +3419,14 @@ int8_t test_vgetq_lane_s8(int8x16_t a) {<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vgetq_lane_s16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <8 x i16> %a, i32 7<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 int16_t test_vgetq_lane_s16(int16x8_t a) {<br>
   return vgetq_lane_s16(a, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vgetq_lane_s32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i32> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x i32> %a, i32 3<br>
 // CHECK:   ret i32 [[VGET_LANE]]<br>
 int32_t test_vgetq_lane_s32(int32x4_t a) {<br>
   return vgetq_lane_s32(a, 3);<br>
@@ -3462,18 +3440,14 @@ poly8_t test_vgetq_lane_p8(poly8x16_t a)<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vgetq_lane_p16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 7<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <8 x i16> %a, i32 7<br>
 // CHECK:   ret i16 [[VGET_LANE]]<br>
 poly16_t test_vgetq_lane_p16(poly16x8_t a) {<br>
   return vgetq_lane_p16(a, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vgetq_lane_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x float> [[TMP1]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <4 x float> %a, i32 3<br>
 // CHECK:   ret float [[VGET_LANE]]<br>
 float32_t test_vgetq_lane_f32(float32x4_t a) {<br>
   return vgetq_lane_f32(a, 3);<br>
@@ -3485,9 +3459,7 @@ float32_t test_vgetq_lane_f32(float32x4_<br>
 // CHECK:   store <8 x half> %a, <8 x half>* [[__REINT_244]], align 16<br>
 // CHECK:   [[TMP0:%.*]] = bitcast <8 x half>* [[__REINT_244]] to <8 x i16>*<br>
 // CHECK:   [[TMP1:%.*]] = load <8 x i16>, <8 x i16>* [[TMP0]], align 16<br>
-// CHECK:   [[TMP2:%.*]] = bitcast <8 x i16> [[TMP1]] to <16 x i8><br>
-// CHECK:   [[TMP3:%.*]] = bitcast <16 x i8> [[TMP2]] to <8 x i16><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <8 x i16> [[TMP3]], i32 3<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <8 x i16> [[TMP1]], i32 3<br>
 // CHECK:   store i16 [[VGET_LANE]], i16* [[__REINT1_244]], align 2<br>
 // CHECK:   [[TMP4:%.*]] = bitcast i16* [[__REINT1_244]] to half*<br>
 // CHECK:   [[TMP5:%.*]] = load half, half* [[TMP4]], align 2<br>
@@ -3498,36 +3470,28 @@ float32_t test_vgetq_lane_f16(float16x8_<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vget_lane_s64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> [[TMP1]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> %a, i32 0<br>
 // CHECK:   ret i64 [[VGET_LANE]]<br>
 int64_t test_vget_lane_s64(int64x1_t a) {<br>
   return vget_lane_s64(a, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vget_lane_u64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %a to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> [[TMP1]], i32 0<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <1 x i64> %a, i32 0<br>
 // CHECK:   ret i64 [[VGET_LANE]]<br>
 uint64_t test_vget_lane_u64(uint64x1_t a) {<br>
   return vget_lane_u64(a, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vgetq_lane_s64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i64> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i64> %a, i32 1<br>
 // CHECK:   ret i64 [[VGET_LANE]]<br>
 int64_t test_vgetq_lane_s64(int64x2_t a) {<br>
   return vgetq_lane_s64(a, 1);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vgetq_lane_u64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i64> [[TMP1]], i32 1<br>
+// CHECK:   [[VGET_LANE:%.*]] = extractelement <2 x i64> %a, i32 1<br>
 // CHECK:   ret i64 [[VGET_LANE]]<br>
 uint64_t test_vgetq_lane_u64(uint64x2_t a) {<br>
   return vgetq_lane_u64(a, 1);<br>
@@ -14061,18 +14025,14 @@ uint8x8_t test_vset_lane_u8(uint8_t a, u<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vset_lane_u16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> [[TMP1]], i16 %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> %b, i16 %a, i32 3<br>
 // CHECK:   ret <4 x i16> [[VSET_LANE]]<br>
 uint16x4_t test_vset_lane_u16(uint16_t a, uint16x4_t b) {<br>
   return vset_lane_u16(a, b, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vset_lane_u32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i32> [[TMP1]], i32 %a, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i32> %b, i32 %a, i32 1<br>
 // CHECK:   ret <2 x i32> [[VSET_LANE]]<br>
 uint32x2_t test_vset_lane_u32(uint32_t a, uint32x2_t b) {<br>
   return vset_lane_u32(a, b, 1);<br>
@@ -14086,18 +14046,14 @@ int8x8_t test_vset_lane_s8(int8_t a, int<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vset_lane_s16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> [[TMP1]], i16 %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> %b, i16 %a, i32 3<br>
 // CHECK:   ret <4 x i16> [[VSET_LANE]]<br>
 int16x4_t test_vset_lane_s16(int16_t a, int16x4_t b) {<br>
   return vset_lane_s16(a, b, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vset_lane_s32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i32> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i32> [[TMP1]], i32 %a, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i32> %b, i32 %a, i32 1<br>
 // CHECK:   ret <2 x i32> [[VSET_LANE]]<br>
 int32x2_t test_vset_lane_s32(int32_t a, int32x2_t b) {<br>
   return vset_lane_s32(a, b, 1);<br>
@@ -14111,18 +14067,14 @@ poly8x8_t test_vset_lane_p8(poly8_t a, p<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vset_lane_p16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i16> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> [[TMP1]], i16 %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> %b, i16 %a, i32 3<br>
 // CHECK:   ret <4 x i16> [[VSET_LANE]]<br>
 poly16x4_t test_vset_lane_p16(poly16_t a, poly16x4_t b) {<br>
   return vset_lane_p16(a, b, 3);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vset_lane_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x float> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x float><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x float> [[TMP1]], float %a, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x float> %b, float %a, i32 1<br>
 // CHECK:   ret <2 x float> [[VSET_LANE]]<br>
 float32x2_t test_vset_lane_f32(float32_t a, float32x2_t b) {<br>
   return vset_lane_f32(a, b, 1);<br>
@@ -14139,9 +14091,7 @@ float32x2_t test_vset_lane_f32(float32_t<br>
 // CHECK:   [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 2<br>
 // CHECK:   [[TMP3:%.*]] = bitcast <4 x half>* [[__REINT1_246]] to <4 x i16>*<br>
 // CHECK:   [[TMP4:%.*]] = load <4 x i16>, <4 x i16>* [[TMP3]], align 8<br>
-// CHECK:   [[TMP5:%.*]] = bitcast <4 x i16> [[TMP4]] to <8 x i8><br>
-// CHECK:   [[TMP6:%.*]] = bitcast <8 x i8> [[TMP5]] to <4 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> [[TMP6]], i16 [[TMP2]], i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i16> [[TMP4]], i16 [[TMP2]], i32 1<br>
 // CHECK:   store <4 x i16> [[VSET_LANE]], <4 x i16>* [[__REINT2_246]], align 8<br>
 // CHECK:   [[TMP7:%.*]] = bitcast <4 x i16>* [[__REINT2_246]] to <4 x half>*<br>
 // CHECK:   [[TMP8:%.*]] = load <4 x half>, <4 x half>* [[TMP7]], align 8<br>
@@ -14158,18 +14108,14 @@ uint8x16_t test_vsetq_lane_u8(uint8_t a,<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vsetq_lane_u16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP1]], i16 %a, i32 7<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> %b, i16 %a, i32 7<br>
 // CHECK:   ret <8 x i16> [[VSET_LANE]]<br>
 uint16x8_t test_vsetq_lane_u16(uint16_t a, uint16x8_t b) {<br>
   return vsetq_lane_u16(a, b, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vsetq_lane_u32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> [[TMP1]], i32 %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> %b, i32 %a, i32 3<br>
 // CHECK:   ret <4 x i32> [[VSET_LANE]]<br>
 uint32x4_t test_vsetq_lane_u32(uint32_t a, uint32x4_t b) {<br>
   return vsetq_lane_u32(a, b, 3);<br>
@@ -14183,18 +14129,14 @@ int8x16_t test_vsetq_lane_s8(int8_t a, i<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vsetq_lane_s16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP1]], i16 %a, i32 7<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> %b, i16 %a, i32 7<br>
 // CHECK:   ret <8 x i16> [[VSET_LANE]]<br>
 int16x8_t test_vsetq_lane_s16(int16_t a, int16x8_t b) {<br>
   return vsetq_lane_s16(a, b, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vsetq_lane_s32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x i32> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> [[TMP1]], i32 %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x i32> %b, i32 %a, i32 3<br>
 // CHECK:   ret <4 x i32> [[VSET_LANE]]<br>
 int32x4_t test_vsetq_lane_s32(int32_t a, int32x4_t b) {<br>
   return vsetq_lane_s32(a, b, 3);<br>
@@ -14208,18 +14150,14 @@ poly8x16_t test_vsetq_lane_p8(poly8_t a,<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vsetq_lane_p16(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <8 x i16> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP1]], i16 %a, i32 7<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> %b, i16 %a, i32 7<br>
 // CHECK:   ret <8 x i16> [[VSET_LANE]]<br>
 poly16x8_t test_vsetq_lane_p16(poly16_t a, poly16x8_t b) {<br>
   return vsetq_lane_p16(a, b, 7);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vsetq_lane_f32(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <4 x float> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x float><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x float> [[TMP1]], float %a, i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <4 x float> %b, float %a, i32 3<br>
 // CHECK:   ret <4 x float> [[VSET_LANE]]<br>
 float32x4_t test_vsetq_lane_f32(float32_t a, float32x4_t b) {<br>
   return vsetq_lane_f32(a, b, 3);<br>
@@ -14236,9 +14174,7 @@ float32x4_t test_vsetq_lane_f32(float32_<br>
 // CHECK:   [[TMP2:%.*]] = load i16, i16* [[TMP1]], align 2<br>
 // CHECK:   [[TMP3:%.*]] = bitcast <8 x half>* [[__REINT1_248]] to <8 x i16>*<br>
 // CHECK:   [[TMP4:%.*]] = load <8 x i16>, <8 x i16>* [[TMP3]], align 16<br>
-// CHECK:   [[TMP5:%.*]] = bitcast <8 x i16> [[TMP4]] to <16 x i8><br>
-// CHECK:   [[TMP6:%.*]] = bitcast <16 x i8> [[TMP5]] to <8 x i16><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP6]], i16 [[TMP2]], i32 3<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <8 x i16> [[TMP4]], i16 [[TMP2]], i32 3<br>
 // CHECK:   store <8 x i16> [[VSET_LANE]], <8 x i16>* [[__REINT2_248]], align 16<br>
 // CHECK:   [[TMP7:%.*]] = bitcast <8 x i16>* [[__REINT2_248]] to <8 x half>*<br>
 // CHECK:   [[TMP8:%.*]] = load <8 x half>, <8 x half>* [[TMP7]], align 16<br>
@@ -14248,36 +14184,28 @@ float16x8_t test_vsetq_lane_f16(float16_<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vset_lane_s64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> [[TMP1]], i64 %a, i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> %b, i64 %a, i32 0<br>
 // CHECK:   ret <1 x i64> [[VSET_LANE]]<br>
 int64x1_t test_vset_lane_s64(int64_t a, int64x1_t b) {<br>
   return vset_lane_s64(a, b, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vset_lane_u64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <1 x i64> %b to <8 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <8 x i8> [[TMP0]] to <1 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> [[TMP1]], i64 %a, i32 0<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <1 x i64> %b, i64 %a, i32 0<br>
 // CHECK:   ret <1 x i64> [[VSET_LANE]]<br>
 uint64x1_t test_vset_lane_u64(uint64_t a, uint64x1_t b) {<br>
   return vset_lane_u64(a, b, 0);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vsetq_lane_s64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> [[TMP1]], i64 %a, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> %b, i64 %a, i32 1<br>
 // CHECK:   ret <2 x i64> [[VSET_LANE]]<br>
 int64x2_t test_vsetq_lane_s64(int64_t a, int64x2_t b) {<br>
   return vsetq_lane_s64(a, b, 1);<br>
 }<br>
<br>
 // CHECK-LABEL: @test_vsetq_lane_u64(<br>
-// CHECK:   [[TMP0:%.*]] = bitcast <2 x i64> %b to <16 x i8><br>
-// CHECK:   [[TMP1:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64><br>
-// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> [[TMP1]], i64 %a, i32 1<br>
+// CHECK:   [[VSET_LANE:%.*]] = insertelement <2 x i64> %b, i64 %a, i32 1<br>
 // CHECK:   ret <2 x i64> [[VSET_LANE]]<br>
 uint64x2_t test_vsetq_lane_u64(uint64_t a, uint64x2_t b) {<br>
   return vsetq_lane_u64(a, b, 1);<br>
<br>
Modified: cfe/trunk/test/Headers/arm-neon-header.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Headers/arm-neon-header.c?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Headers/arm-neon-header.c?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/Headers/arm-neon-header.c (original)<br>
+++ cfe/trunk/test/Headers/arm-neon-header.c Wed Oct  9 10:57:59 2019<br>
@@ -20,4 +20,7 @@<br>
 // RUN: %clang -fsyntax-only -Wall -Werror -ffreestanding -nostdinc++ --target=aarch64_be-none-eabi -march=armv8.2-a+fp16 -std=c++14 -xc++ %s<br>
 // RUN: %clang -fsyntax-only -Wall -Werror -ffreestanding -nostdinc++ --target=aarch64_be-none-eabi -march=armv8.2-a+fp16 -std=c++17 -xc++ %s<br>
<br>
+// RUN: %clang -fsyntax-only -Wall -Werror -ffreestanding --target=aarch64-none-eabi -march=armv8.2-a+fp16 -std=c11 -xc -flax-vector-conversions=none %s<br>
+// RUN: %clang -fsyntax-only -Wall -Werror -ffreestanding --target=aarch64_be-none-eabi -march=armv8.2-a+fp16 -std=c11 -xc -flax-vector-conversions=none %s<br>
+<br>
 #include <arm_neon.h><br>
<br>
Modified: cfe/trunk/utils/TableGen/NeonEmitter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/NeonEmitter.cpp?rev=374191&r1=374190&r2=374191&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/TableGen/NeonEmitter.cpp?rev=374191&r1=374190&r2=374191&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/utils/TableGen/NeonEmitter.cpp (original)<br>
+++ cfe/trunk/utils/TableGen/NeonEmitter.cpp Wed Oct  9 10:57:59 2019<br>
@@ -636,7 +636,7 @@ std::string Type::builtin_str() const {<br>
     default: llvm_unreachable("Unhandled case!");<br>
     }<br>
<br>
-  if (isChar() && !Pointer)<br>
+  if (isChar() && !Pointer && Signed)<br>
     // Make chars explicitly signed.<br>
     S = "S" + S;<br>
   else if (isInteger() && !Pointer && !Signed)<br>
@@ -1442,7 +1442,7 @@ void Intrinsic::emitBodyAsBuiltinCall()<br>
     }<br>
<br>
     // Check if an explicit cast is needed.<br>
-    if (CastToType.isVector()) {<br>
+    if (CastToType.isVector() && LocalCK == ClassB) {<br>
       CastToType.makeInteger(8, true);<br>
       Arg = "(" + CastToType.str() + ")" + Arg;<br>
     }<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>