aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/c.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-08-27 17:36:43 -0400
committerAndrew Kelley <andrew@ziglang.org>2023-08-28 19:04:53 -0700
commitc429bb5d2feb36f83e33ef95a25dd5bb7455f16c (patch)
treef5cb0a986c3a7792867f88e0985d356d99802da2 /src/codegen/c.zig
parent26b03ca823e36b213b0e1c1d4cddda13d9207eb3 (diff)
downloadzig-c429bb5d2feb36f83e33ef95a25dd5bb7455f16c.tar.gz
zig-c429bb5d2feb36f83e33ef95a25dd5bb7455f16c.zip
llvm/cbe: support slice in `@prefetch`
Closes #16967
Diffstat (limited to 'src/codegen/c.zig')
-rw-r--r--src/codegen/c.zig7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig
index 02f59df8d6..2ac9188704 100644
--- a/src/codegen/c.zig
+++ b/src/codegen/c.zig
@@ -6951,8 +6951,10 @@ fn airUnionInit(f: *Function, inst: Air.Inst.Index) !CValue {
}
fn airPrefetch(f: *Function, inst: Air.Inst.Index) !CValue {
+ const mod = f.object.dg.module;
const prefetch = f.air.instructions.items(.data)[inst].prefetch;
+ const ptr_ty = f.typeOf(prefetch.ptr);
const ptr = try f.resolveInst(prefetch.ptr);
try reap(f, inst, &.{prefetch.ptr});
@@ -6960,7 +6962,10 @@ fn airPrefetch(f: *Function, inst: Air.Inst.Index) !CValue {
switch (prefetch.cache) {
.data => {
try writer.writeAll("zig_prefetch(");
- try f.writeCValue(writer, ptr, .FunctionArgument);
+ if (ptr_ty.isSlice(mod))
+ try f.writeCValueMember(writer, ptr, .{ .identifier = "ptr" })
+ else
+ try f.writeCValue(writer, ptr, .FunctionArgument);
try writer.print(", {d}, {d});\n", .{ @intFromEnum(prefetch.rw), prefetch.locality });
},
// The available prefetch intrinsics do not accept a cache argument; only