diff --git a/llvm/test/CodeGen/X86/AMX/amx-combine.ll b/llvm/test/CodeGen/X86/AMX/amx-combine.ll index fe21d64eb7a3a..07f489c633c55 100644 --- a/llvm/test/CodeGen/X86/AMX/amx-combine.ll +++ b/llvm/test/CodeGen/X86/AMX/amx-combine.ll @@ -133,7 +133,7 @@ entry: ret void } -define void @combine_v256i8amcast_with_store(i8* %src_ptr, <256 x i8>* %dst_ptr) { +define void @combine_v256i8amcast_with_store(ptr %src_ptr, ptr %dst_ptr) { ; CHECK-LABEL: @combine_v256i8amcast_with_store( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TILE:%.*]] = call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 32, ptr [[SRC_PTR:%.*]], i64 64) @@ -141,13 +141,13 @@ define void @combine_v256i8amcast_with_store(i8* %src_ptr, <256 x i8>* %dst_ptr) ; CHECK-NEXT: ret void ; entry: - %tile = call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 32, i8* %src_ptr, i64 64) + %tile = call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 32, ptr %src_ptr, i64 64) %vec = call <256 x i8> @llvm.x86.cast.tile.to.vector.v256i8(x86_amx %tile) - store <256 x i8> %vec, <256 x i8>* %dst_ptr, align 256 + store <256 x i8> %vec, ptr %dst_ptr, align 256 ret void } -define void @combine_v256i8amcast_with_load(i8* %src_ptr, <256 x i8>* %dst_ptr) { +define void @combine_v256i8amcast_with_load(ptr %src_ptr, ptr %dst_ptr) { ; CHECK-LABEL: @combine_v256i8amcast_with_load( ; CHECK-NEXT: entry: ; CHECK-NEXT: [[TMP0:%.*]] = call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 32, ptr [[SRC_PTR:%.*]], i64 32) @@ -157,7 +157,7 @@ define void @combine_v256i8amcast_with_load(i8* %src_ptr, <256 x i8>* %dst_ptr) entry: %vec = load <256 x i8>, ptr %src_ptr, align 256 %tile = call x86_amx @llvm.x86.cast.vector.to.tile.v256i8(<256 x i8> %vec) - call void @llvm.x86.tilestored64.internal(i16 8, i16 32, <256 x i8>* %dst_ptr, i64 32, x86_amx %tile) + call void @llvm.x86.tilestored64.internal(i16 8, i16 32, ptr %dst_ptr, i64 32, x86_amx %tile) ret void } diff --git a/llvm/test/CodeGen/X86/AMX/amx-tile-complex-internals.ll b/llvm/test/CodeGen/X86/AMX/amx-tile-complex-internals.ll index 924572a5bfbdd..ac731b48f6712 100644 --- a/llvm/test/CodeGen/X86/AMX/amx-tile-complex-internals.ll +++ b/llvm/test/CodeGen/X86/AMX/amx-tile-complex-internals.ll @@ -3,7 +3,7 @@ ; RUN: -mattr=+amx-complex \ ; RUN: -verify-machineinstrs | FileCheck %s -define void @test_amx(i8* %pointer, i8* %base, i64 %stride) { +define void @test_amx(ptr %pointer, ptr %base, i64 %stride) { ; CHECK-LABEL: test_amx: ; CHECK: # %bb.0: ; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm0 @@ -27,21 +27,21 @@ define void @test_amx(i8* %pointer, i8* %base, i64 %stride) { ; CHECK-NEXT: vzeroupper ; CHECK-NEXT: retq - %a = call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, i8* %base, i64 %stride) + %a = call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, ptr %base, i64 %stride) %b = call x86_amx @llvm.x86.tilezero.internal(i16 8, i16 8) %c = call x86_amx @llvm.x86.tilezero.internal(i16 8, i16 8) %c1 = call x86_amx @llvm.x86.tcmmimfp16ps.internal(i16 8, i16 8, i16 8, x86_amx %c, x86_amx %a, x86_amx %b) %c2 = call x86_amx @llvm.x86.tcmmrlfp16ps.internal(i16 8, i16 8, i16 8, x86_amx %c1, x86_amx %a, x86_amx %b) - call void @llvm.x86.tilestored64.internal(i16 8, i16 8, i8* %pointer, i64 %stride, x86_amx %c2) + call void @llvm.x86.tilestored64.internal(i16 8, i16 8, ptr %pointer, i64 %stride, x86_amx %c2) ret void } declare x86_amx @llvm.x86.tilezero.internal(i16, i16) -declare x86_amx @llvm.x86.tileloadd64.internal(i16, i16, i8*, i64) -declare x86_amx @llvm.x86.tileloaddt164.internal(i16, i16, i8*, i64) -declare void @llvm.x86.tilestored64.internal(i16, i16, i8*, i64, x86_amx) +declare x86_amx @llvm.x86.tileloadd64.internal(i16, i16, ptr, i64) +declare x86_amx @llvm.x86.tileloaddt164.internal(i16, i16, ptr, i64) +declare void @llvm.x86.tilestored64.internal(i16, i16, ptr, i64, x86_amx) declare x86_amx @llvm.x86.tcmmimfp16ps.internal(i16, i16, i16, x86_amx, x86_amx, x86_amx) declare x86_amx @llvm.x86.tcmmrlfp16ps.internal(i16, i16, i16, x86_amx, x86_amx, x86_amx) diff --git a/llvm/test/CodeGen/X86/GlobalISel/x86_64-irtranslator-struct-return.ll b/llvm/test/CodeGen/X86/GlobalISel/x86_64-irtranslator-struct-return.ll index 6e03e891f9d77..68d546ab09388 100644 --- a/llvm/test/CodeGen/X86/GlobalISel/x86_64-irtranslator-struct-return.ll +++ b/llvm/test/CodeGen/X86/GlobalISel/x86_64-irtranslator-struct-return.ll @@ -26,17 +26,17 @@ define float @test_return_f1(float %f.coerce) { entry: %retval = alloca %struct.f1, align 4 %f = alloca %struct.f1, align 4 - %coerce.dive = getelementptr inbounds %struct.f1, %struct.f1* %f, i32 0, i32 0 - store float %f.coerce, float* %coerce.dive, align 4 - %0 = bitcast %struct.f1* %retval to i8* - %1 = bitcast %struct.f1* %f to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 %1, i64 4, i1 false) - %coerce.dive1 = getelementptr inbounds %struct.f1, %struct.f1* %retval, i32 0, i32 0 - %2 = load float, float* %coerce.dive1, align 4 + %coerce.dive = getelementptr inbounds %struct.f1, ptr %f, i32 0, i32 0 + store float %f.coerce, ptr %coerce.dive, align 4 + %0 = bitcast ptr %retval to ptr + %1 = bitcast ptr %f to ptr + call void @llvm.memcpy.p0.p0.i64(ptr align 4 %0, ptr align 4 %1, i64 4, i1 false) + %coerce.dive1 = getelementptr inbounds %struct.f1, ptr %retval, i32 0, i32 0 + %2 = load float, ptr %coerce.dive1, align 4 ret float %2 } -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) #1 +declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1) #1 define double @test_return_d1(double %d.coerce) { ; ALL-LABEL: name: test_return_d1 @@ -55,13 +55,13 @@ define double @test_return_d1(double %d.coerce) { entry: %retval = alloca %struct.d1, align 8 %d = alloca %struct.d1, align 8 - %coerce.dive = getelementptr inbounds %struct.d1, %struct.d1* %d, i32 0, i32 0 - store double %d.coerce, double* %coerce.dive, align 8 - %0 = bitcast %struct.d1* %retval to i8* - %1 = bitcast %struct.d1* %d to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %0, i8* align 8 %1, i64 8, i1 false) - %coerce.dive1 = getelementptr inbounds %struct.d1, %struct.d1* %retval, i32 0, i32 0 - %2 = load double, double* %coerce.dive1, align 8 + %coerce.dive = getelementptr inbounds %struct.d1, ptr %d, i32 0, i32 0 + store double %d.coerce, ptr %coerce.dive, align 8 + %0 = bitcast ptr %retval to ptr + %1 = bitcast ptr %d to ptr + call void @llvm.memcpy.p0.p0.i64(ptr align 8 %0, ptr align 8 %1, i64 8, i1 false) + %coerce.dive1 = getelementptr inbounds %struct.d1, ptr %retval, i32 0, i32 0 + %2 = load double, ptr %coerce.dive1, align 8 ret double %2 } @@ -89,16 +89,16 @@ define { double, double } @test_return_d2(double %d.coerce0, double %d.coerce1) entry: %retval = alloca %struct.d2, align 8 %d = alloca %struct.d2, align 8 - %0 = bitcast %struct.d2* %d to { double, double }* - %1 = getelementptr inbounds { double, double }, { double, double }* %0, i32 0, i32 0 - store double %d.coerce0, double* %1, align 8 - %2 = getelementptr inbounds { double, double }, { double, double }* %0, i32 0, i32 1 - store double %d.coerce1, double* %2, align 8 - %3 = bitcast %struct.d2* %retval to i8* - %4 = bitcast %struct.d2* %d to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %3, i8* align 8 %4, i64 16, i1 false) - %5 = bitcast %struct.d2* %retval to { double, double }* - %6 = load { double, double }, { double, double }* %5, align 8 + %0 = bitcast ptr %d to ptr + %1 = getelementptr inbounds { double, double }, ptr %0, i32 0, i32 0 + store double %d.coerce0, ptr %1, align 8 + %2 = getelementptr inbounds { double, double }, ptr %0, i32 0, i32 1 + store double %d.coerce1, ptr %2, align 8 + %3 = bitcast ptr %retval to ptr + %4 = bitcast ptr %d to ptr + call void @llvm.memcpy.p0.p0.i64(ptr align 8 %3, ptr align 8 %4, i64 16, i1 false) + %5 = bitcast ptr %retval to ptr + %6 = load { double, double }, ptr %5, align 8 ret { double, double } %6 } @@ -119,13 +119,13 @@ define i32 @test_return_i1(i32 %i.coerce) { entry: %retval = alloca %struct.i1, align 4 %i = alloca %struct.i1, align 4 - %coerce.dive = getelementptr inbounds %struct.i1, %struct.i1* %i, i32 0, i32 0 - store i32 %i.coerce, i32* %coerce.dive, align 4 - %0 = bitcast %struct.i1* %retval to i8* - %1 = bitcast %struct.i1* %i to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %0, i8* align 4 %1, i64 4, i1 false) - %coerce.dive1 = getelementptr inbounds %struct.i1, %struct.i1* %retval, i32 0, i32 0 - %2 = load i32, i32* %coerce.dive1, align 4 + %coerce.dive = getelementptr inbounds %struct.i1, ptr %i, i32 0, i32 0 + store i32 %i.coerce, ptr %coerce.dive, align 4 + %0 = bitcast ptr %retval to ptr + %1 = bitcast ptr %i to ptr + call void @llvm.memcpy.p0.p0.i64(ptr align 4 %0, ptr align 4 %1, i64 4, i1 false) + %coerce.dive1 = getelementptr inbounds %struct.i1, ptr %retval, i32 0, i32 0 + %2 = load i32, ptr %coerce.dive1, align 4 ret i32 %2 } @@ -146,13 +146,13 @@ define i64 @test_return_i2(i64 %i.coerce) { entry: %retval = alloca %struct.i2, align 4 %i = alloca %struct.i2, align 4 - %0 = bitcast %struct.i2* %i to i64* - store i64 %i.coerce, i64* %0, align 4 - %1 = bitcast %struct.i2* %retval to i8* - %2 = bitcast %struct.i2* %i to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %1, i8* align 4 %2, i64 8, i1 false) - %3 = bitcast %struct.i2* %retval to i64* - %4 = load i64, i64* %3, align 4 + %0 = bitcast ptr %i to ptr + store i64 %i.coerce, ptr %0, align 4 + %1 = bitcast ptr %retval to ptr + %2 = bitcast ptr %i to ptr + call void @llvm.memcpy.p0.p0.i64(ptr align 4 %1, ptr align 4 %2, i64 8, i1 false) + %3 = bitcast ptr %retval to ptr + %4 = load i64, ptr %3, align 4 ret i64 %4 } @@ -186,20 +186,20 @@ entry: %i = alloca %struct.i3, align 4 %coerce = alloca { i64, i32 }, align 4 %tmp = alloca { i64, i32 }, align 8 - %0 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 0 - store i64 %i.coerce0, i64* %0, align 4 - %1 = getelementptr inbounds { i64, i32 }, { i64, i32 }* %coerce, i32 0, i32 1 - store i32 %i.coerce1, i32* %1, align 4 - %2 = bitcast %struct.i3* %i to i8* - %3 = bitcast { i64, i32 }* %coerce to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %2, i8* align 4 %3, i64 12, i1 false) - %4 = bitcast %struct.i3* %retval to i8* - %5 = bitcast %struct.i3* %i to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %4, i8* align 4 %5, i64 12, i1 false) - %6 = bitcast { i64, i32 }* %tmp to i8* - %7 = bitcast %struct.i3* %retval to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %6, i8* align 4 %7, i64 12, i1 false) - %8 = load { i64, i32 }, { i64, i32 }* %tmp, align 8 + %0 = getelementptr inbounds { i64, i32 }, ptr %coerce, i32 0, i32 0 + store i64 %i.coerce0, ptr %0, align 4 + %1 = getelementptr inbounds { i64, i32 }, ptr %coerce, i32 0, i32 1 + store i32 %i.coerce1, ptr %1, align 4 + %2 = bitcast ptr %i to ptr + %3 = bitcast ptr %coerce to ptr + call void @llvm.memcpy.p0.p0.i64(ptr align 4 %2, ptr align 4 %3, i64 12, i1 false) + %4 = bitcast ptr %retval to ptr + %5 = bitcast ptr %i to ptr + call void @llvm.memcpy.p0.p0.i64(ptr align 4 %4, ptr align 4 %5, i64 12, i1 false) + %6 = bitcast ptr %tmp to ptr + %7 = bitcast ptr %retval to ptr + call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6, ptr align 4 %7, i64 12, i1 false) + %8 = load { i64, i32 }, ptr %tmp, align 8 ret { i64, i32 } %8 } @@ -227,15 +227,15 @@ define { i64, i64 } @test_return_i4(i64 %i.coerce0, i64 %i.coerce1) { entry: %retval = alloca %struct.i4, align 4 %i = alloca %struct.i4, align 4 - %0 = bitcast %struct.i4* %i to { i64, i64 }* - %1 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 0 - store i64 %i.coerce0, i64* %1, align 4 - %2 = getelementptr inbounds { i64, i64 }, { i64, i64 }* %0, i32 0, i32 1 - store i64 %i.coerce1, i64* %2, align 4 - %3 = bitcast %struct.i4* %retval to i8* - %4 = bitcast %struct.i4* %i to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 4 %3, i8* align 4 %4, i64 16, i1 false) - %5 = bitcast %struct.i4* %retval to { i64, i64 }* - %6 = load { i64, i64 }, { i64, i64 }* %5, align 4 + %0 = bitcast ptr %i to ptr + %1 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 0 + store i64 %i.coerce0, ptr %1, align 4 + %2 = getelementptr inbounds { i64, i64 }, ptr %0, i32 0, i32 1 + store i64 %i.coerce1, ptr %2, align 4 + %3 = bitcast ptr %retval to ptr + %4 = bitcast ptr %i to ptr + call void @llvm.memcpy.p0.p0.i64(ptr align 4 %3, ptr align 4 %4, i64 16, i1 false) + %5 = bitcast ptr %retval to ptr + %6 = load { i64, i64 }, ptr %5, align 4 ret { i64, i64 } %6 } diff --git a/llvm/test/CodeGen/X86/MergeConsecutiveStores.ll b/llvm/test/CodeGen/X86/MergeConsecutiveStores.ll index 78a0a849f13ea..fa9ed49da1b7f 100644 --- a/llvm/test/CodeGen/X86/MergeConsecutiveStores.ll +++ b/llvm/test/CodeGen/X86/MergeConsecutiveStores.ll @@ -9,7 +9,7 @@ %struct.C = type { i8, i8, i8, i8, i32, i32, i32, i64 } ; save 1,2,3 ... as one big integer. -define void @merge_const_store(i32 %count, %struct.A* nocapture %p) nounwind uwtable noinline ssp { +define void @merge_const_store(i32 %count, ptr nocapture %p) nounwind uwtable noinline ssp { ; X86-LABEL: merge_const_store: ; X86: # %bb.0: ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax @@ -47,25 +47,25 @@ define void @merge_const_store(i32 %count, %struct.A* nocapture %p) nounwind uwt br i1 %1, label %.lr.ph, label %._crit_edge .lr.ph: %i.02 = phi i32 [ %10, %.lr.ph ], [ 0, %0 ] - %.01 = phi %struct.A* [ %11, %.lr.ph ], [ %p, %0 ] - %2 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 0 - store i8 1, i8* %2, align 1 - %3 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 1 - store i8 2, i8* %3, align 1 - %4 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 2 - store i8 3, i8* %4, align 1 - %5 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 3 - store i8 4, i8* %5, align 1 - %6 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 4 - store i8 5, i8* %6, align 1 - %7 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 5 - store i8 6, i8* %7, align 1 - %8 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 6 - store i8 7, i8* %8, align 1 - %9 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 7 - store i8 8, i8* %9, align 1 + %.01 = phi ptr [ %11, %.lr.ph ], [ %p, %0 ] + %2 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 0 + store i8 1, ptr %2, align 1 + %3 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 1 + store i8 2, ptr %3, align 1 + %4 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 2 + store i8 3, ptr %4, align 1 + %5 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 3 + store i8 4, ptr %5, align 1 + %6 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 4 + store i8 5, ptr %6, align 1 + %7 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 5 + store i8 6, ptr %7, align 1 + %8 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 6 + store i8 7, ptr %8, align 1 + %9 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 7 + store i8 8, ptr %9, align 1 %10 = add nsw i32 %i.02, 1 - %11 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 1 + %11 = getelementptr inbounds %struct.A, ptr %.01, i64 1 %exitcond = icmp eq i32 %10, %count br i1 %exitcond, label %._crit_edge, label %.lr.ph ._crit_edge: @@ -73,7 +73,7 @@ define void @merge_const_store(i32 %count, %struct.A* nocapture %p) nounwind uwt } ; No vectors because we use noimplicitfloat -define void @merge_const_store_no_vec(i32 %count, %struct.B* nocapture %p) noimplicitfloat{ +define void @merge_const_store_no_vec(i32 %count, ptr nocapture %p) noimplicitfloat{ ; X86-LABEL: merge_const_store_no_vec: ; X86: # %bb.0: ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax @@ -118,25 +118,25 @@ define void @merge_const_store_no_vec(i32 %count, %struct.B* nocapture %p) noimp br i1 %1, label %.lr.ph, label %._crit_edge .lr.ph: %i.02 = phi i32 [ %10, %.lr.ph ], [ 0, %0 ] - %.01 = phi %struct.B* [ %11, %.lr.ph ], [ %p, %0 ] - %2 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 0 - store i32 0, i32* %2, align 4 - %3 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 1 - store i32 0, i32* %3, align 4 - %4 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 2 - store i32 0, i32* %4, align 4 - %5 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 3 - store i32 0, i32* %5, align 4 - %6 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 4 - store i32 0, i32* %6, align 4 - %7 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 5 - store i32 0, i32* %7, align 4 - %8 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 6 - store i32 0, i32* %8, align 4 - %9 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 7 - store i32 0, i32* %9, align 4 + %.01 = phi ptr [ %11, %.lr.ph ], [ %p, %0 ] + %2 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 0 + store i32 0, ptr %2, align 4 + %3 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 1 + store i32 0, ptr %3, align 4 + %4 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 2 + store i32 0, ptr %4, align 4 + %5 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 3 + store i32 0, ptr %5, align 4 + %6 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 4 + store i32 0, ptr %6, align 4 + %7 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 5 + store i32 0, ptr %7, align 4 + %8 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 6 + store i32 0, ptr %8, align 4 + %9 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 7 + store i32 0, ptr %9, align 4 %10 = add nsw i32 %i.02, 1 - %11 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 1 + %11 = getelementptr inbounds %struct.B, ptr %.01, i64 1 %exitcond = icmp eq i32 %10, %count br i1 %exitcond, label %._crit_edge, label %.lr.ph ._crit_edge: @@ -144,7 +144,7 @@ define void @merge_const_store_no_vec(i32 %count, %struct.B* nocapture %p) noimp } ; Move the constants using a single vector store. -define void @merge_const_store_vec(i32 %count, %struct.B* nocapture %p) nounwind uwtable noinline ssp { +define void @merge_const_store_vec(i32 %count, ptr nocapture %p) nounwind uwtable noinline ssp { ; X86-LABEL: merge_const_store_vec: ; X86: # %bb.0: ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax @@ -184,25 +184,25 @@ define void @merge_const_store_vec(i32 %count, %struct.B* nocapture %p) nounwind br i1 %1, label %.lr.ph, label %._crit_edge .lr.ph: %i.02 = phi i32 [ %10, %.lr.ph ], [ 0, %0 ] - %.01 = phi %struct.B* [ %11, %.lr.ph ], [ %p, %0 ] - %2 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 0 - store i32 0, i32* %2, align 4 - %3 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 1 - store i32 0, i32* %3, align 4 - %4 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 2 - store i32 0, i32* %4, align 4 - %5 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 3 - store i32 0, i32* %5, align 4 - %6 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 4 - store i32 0, i32* %6, align 4 - %7 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 5 - store i32 0, i32* %7, align 4 - %8 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 6 - store i32 0, i32* %8, align 4 - %9 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 0, i32 7 - store i32 0, i32* %9, align 4 + %.01 = phi ptr [ %11, %.lr.ph ], [ %p, %0 ] + %2 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 0 + store i32 0, ptr %2, align 4 + %3 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 1 + store i32 0, ptr %3, align 4 + %4 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 2 + store i32 0, ptr %4, align 4 + %5 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 3 + store i32 0, ptr %5, align 4 + %6 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 4 + store i32 0, ptr %6, align 4 + %7 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 5 + store i32 0, ptr %7, align 4 + %8 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 6 + store i32 0, ptr %8, align 4 + %9 = getelementptr inbounds %struct.B, ptr %.01, i64 0, i32 7 + store i32 0, ptr %9, align 4 %10 = add nsw i32 %i.02, 1 - %11 = getelementptr inbounds %struct.B, %struct.B* %.01, i64 1 + %11 = getelementptr inbounds %struct.B, ptr %.01, i64 1 %exitcond = icmp eq i32 %10, %count br i1 %exitcond, label %._crit_edge, label %.lr.ph ._crit_edge: @@ -210,7 +210,7 @@ define void @merge_const_store_vec(i32 %count, %struct.B* nocapture %p) nounwind } ; Move the first 4 constants as a single vector. Move the rest as scalars. -define void @merge_nonconst_store(i32 %count, i8 %zz, %struct.A* nocapture %p) nounwind uwtable noinline ssp { +define void @merge_nonconst_store(i32 %count, i8 %zz, ptr nocapture %p) nounwind uwtable noinline ssp { ; X86-BWON-LABEL: merge_nonconst_store: ; X86-BWON: # %bb.0: ; X86-BWON-NEXT: movl {{[0-9]+}}(%esp), %eax @@ -273,32 +273,32 @@ define void @merge_nonconst_store(i32 %count, i8 %zz, %struct.A* nocapture %p) n br i1 %1, label %.lr.ph, label %._crit_edge .lr.ph: %i.02 = phi i32 [ %10, %.lr.ph ], [ 0, %0 ] - %.01 = phi %struct.A* [ %11, %.lr.ph ], [ %p, %0 ] - %2 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 0 - store i8 1, i8* %2, align 1 - %3 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 1 - store i8 2, i8* %3, align 1 - %4 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 2 - store i8 3, i8* %4, align 1 - %5 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 3 - store i8 4, i8* %5, align 1 - %6 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 4 - store i8 %zz, i8* %6, align 1 ; <----------- Not a const; - %7 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 5 - store i8 6, i8* %7, align 1 - %8 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 6 - store i8 7, i8* %8, align 1 - %9 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 0, i32 7 - store i8 8, i8* %9, align 1 + %.01 = phi ptr [ %11, %.lr.ph ], [ %p, %0 ] + %2 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 0 + store i8 1, ptr %2, align 1 + %3 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 1 + store i8 2, ptr %3, align 1 + %4 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 2 + store i8 3, ptr %4, align 1 + %5 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 3 + store i8 4, ptr %5, align 1 + %6 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 4 + store i8 %zz, ptr %6, align 1 ; <----------- Not a const; + %7 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 5 + store i8 6, ptr %7, align 1 + %8 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 6 + store i8 7, ptr %8, align 1 + %9 = getelementptr inbounds %struct.A, ptr %.01, i64 0, i32 7 + store i8 8, ptr %9, align 1 %10 = add nsw i32 %i.02, 1 - %11 = getelementptr inbounds %struct.A, %struct.A* %.01, i64 1 + %11 = getelementptr inbounds %struct.A, ptr %.01, i64 1 %exitcond = icmp eq i32 %10, %count br i1 %exitcond, label %._crit_edge, label %.lr.ph ._crit_edge: ret void } -define void @merge_loads_i16(i32 %count, %struct.A* noalias nocapture %q, %struct.A* noalias nocapture %p) nounwind uwtable noinline ssp { +define void @merge_loads_i16(i32 %count, ptr noalias nocapture %q, ptr noalias nocapture %p) nounwind uwtable noinline ssp { ; X86-BWON-LABEL: merge_loads_i16: ; X86-BWON: # %bb.0: ; X86-BWON-NEXT: pushl %esi @@ -376,21 +376,21 @@ define void @merge_loads_i16(i32 %count, %struct.A* noalias nocapture %q, %struc br i1 %1, label %.lr.ph, label %._crit_edge .lr.ph: ; preds = %0 - %2 = getelementptr inbounds %struct.A, %struct.A* %q, i64 0, i32 0 - %3 = getelementptr inbounds %struct.A, %struct.A* %q, i64 0, i32 1 + %2 = getelementptr inbounds %struct.A, ptr %q, i64 0, i32 0 + %3 = getelementptr inbounds %struct.A, ptr %q, i64 0, i32 1 br label %4 ;