authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-08-29 18:19:39-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-08-29 18:19:39-07:00
logbf28765a975355c27558eaa86cf00ccb29b663a7
tree0088a79455f3b2077e54621ec821b437e6f5c734
parentf52ee1607ab6e055e7e3225ca521a75f7e208364

LLVM: upgrade byval attr code to LLVM 15 opaque pointers

Follow-up from 74673b7f69b27dc39a653f92eb58bba71e289f39.

1 files changed, 12 insertions(+), 11 deletions(-)

src/codegen/llvm.zig+12-11
...@@ -797,6 +797,7 @@ pub const Object = struct {...@@ -797,6 +797,7 @@ pub const Object = struct {
797 const param_ty = fn_info.param_types[it.zig_index - 1];797 const param_ty = fn_info.param_types[it.zig_index - 1];
798 const param = llvm_func.getParam(llvm_arg_i);798 const param = llvm_func.getParam(llvm_arg_i);
799 try args.ensureUnusedCapacity(1);799 try args.ensureUnusedCapacity(1);
800 assert(!it.byval_attr);
800801
801 if (isByRef(param_ty)) {802 if (isByRef(param_ty)) {
802 const alignment = param_ty.abiAlignment(target);803 const alignment = param_ty.abiAlignment(target);
...@@ -840,11 +841,16 @@ pub const Object = struct {...@@ -840,11 +841,16 @@ pub const Object = struct {
840 },841 },
841 .byref => {842 .byref => {
842 const param_ty = fn_info.param_types[it.zig_index - 1];843 const param_ty = fn_info.param_types[it.zig_index - 1];
844 const param_llvm_ty = try dg.lowerType(param_ty);
843 const param = llvm_func.getParam(llvm_arg_i);845 const param = llvm_func.getParam(llvm_arg_i);
846 const alignment = param_ty.abiAlignment(target);
844847
845 dg.addArgAttr(llvm_func, llvm_arg_i, "nonnull");848 dg.addArgAttr(llvm_func, llvm_arg_i, "nonnull");
846 dg.addArgAttr(llvm_func, llvm_arg_i, "readonly");849 dg.addArgAttr(llvm_func, llvm_arg_i, "readonly");
847 dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", param_ty.abiAlignment(target));850 dg.addArgAttrInt(llvm_func, llvm_arg_i, "align", alignment);
851 if (it.byval_attr) {
852 llvm_func.addByValAttr(llvm_arg_i, param_llvm_ty);
853 }
848854
849 llvm_arg_i += 1;855 llvm_arg_i += 1;
850856
...@@ -853,14 +859,13 @@ pub const Object = struct {...@@ -853,14 +859,13 @@ pub const Object = struct {
853 if (isByRef(param_ty)) {859 if (isByRef(param_ty)) {
854 args.appendAssumeCapacity(param);860 args.appendAssumeCapacity(param);
855 } else {861 } else {
856 const alignment = param_ty.abiAlignment(target);
857 const param_llvm_ty = try dg.lowerType(param_ty);
858 const load_inst = builder.buildLoad(param_llvm_ty, param, "");862 const load_inst = builder.buildLoad(param_llvm_ty, param, "");
859 load_inst.setAlignment(alignment);863 load_inst.setAlignment(alignment);
860 args.appendAssumeCapacity(load_inst);864 args.appendAssumeCapacity(load_inst);
861 }865 }
862 },866 },
863 .abi_sized_int => {867 .abi_sized_int => {
868 assert(!it.byval_attr);
864 const param_ty = fn_info.param_types[it.zig_index - 1];869 const param_ty = fn_info.param_types[it.zig_index - 1];
865 const param = llvm_func.getParam(llvm_arg_i);870 const param = llvm_func.getParam(llvm_arg_i);
866 llvm_arg_i += 1;871 llvm_arg_i += 1;
...@@ -890,6 +895,7 @@ pub const Object = struct {...@@ -890,6 +895,7 @@ pub const Object = struct {
890 }895 }
891 },896 },
892 .slice => {897 .slice => {
898 assert(!it.byval_attr);
893 const param_ty = fn_info.param_types[it.zig_index - 1];899 const param_ty = fn_info.param_types[it.zig_index - 1];
894 const ptr_info = param_ty.ptrInfo().data;900 const ptr_info = param_ty.ptrInfo().data;
895901
...@@ -919,6 +925,7 @@ pub const Object = struct {...@@ -919,6 +925,7 @@ pub const Object = struct {
919 try args.append(aggregate);925 try args.append(aggregate);
920 },926 },
921 .multiple_llvm_ints => {927 .multiple_llvm_ints => {
928 assert(!it.byval_attr);
922 const llvm_ints = it.llvm_types_buffer[0..it.llvm_types_len];929 const llvm_ints = it.llvm_types_buffer[0..it.llvm_types_len];
923 const param_ty = fn_info.param_types[it.zig_index - 1];930 const param_ty = fn_info.param_types[it.zig_index - 1];
924 const param_llvm_ty = try dg.lowerType(param_ty);931 const param_llvm_ty = try dg.lowerType(param_ty);
...@@ -949,6 +956,7 @@ pub const Object = struct {...@@ -949,6 +956,7 @@ pub const Object = struct {
949 try args.append(loaded);956 try args.append(loaded);
950 },957 },
951 .multiple_llvm_float => {958 .multiple_llvm_float => {
959 assert(!it.byval_attr);
952 const llvm_floats = it.llvm_types_buffer[0..it.llvm_types_len];960 const llvm_floats = it.llvm_types_buffer[0..it.llvm_types_len];
953 const param_ty = fn_info.param_types[it.zig_index - 1];961 const param_ty = fn_info.param_types[it.zig_index - 1];
954 const param_llvm_ty = try dg.lowerType(param_ty);962 const param_llvm_ty = try dg.lowerType(param_ty);
...@@ -983,6 +991,7 @@ pub const Object = struct {...@@ -983,6 +991,7 @@ pub const Object = struct {
983 try args.append(loaded);991 try args.append(loaded);
984 },992 },
985 .as_u16 => {993 .as_u16 => {
994 assert(!it.byval_attr);
986 const param = llvm_func.getParam(llvm_arg_i);995 const param = llvm_func.getParam(llvm_arg_i);
987 llvm_arg_i += 1;996 llvm_arg_i += 1;
988 const casted = builder.buildBitCast(param, dg.context.halfType(), "");997 const casted = builder.buildBitCast(param, dg.context.halfType(), "");
...@@ -2406,14 +2415,6 @@ pub const DeclGen = struct {...@@ -2406,14 +2415,6 @@ pub const DeclGen = struct {
2406 dg.addFnAttr(llvm_fn, "noreturn");2415 dg.addFnAttr(llvm_fn, "noreturn");
2407 }2416 }
24082417
2409 var llvm_arg_i = @as(c_uint, @boolToInt(sret)) + @boolToInt(err_return_tracing);
2410 var it = iterateParamTypes(dg, fn_info);
2411 while (it.next()) |_| : (llvm_arg_i += 1) {
2412 if (!it.byval_attr) continue;
2413 const param = llvm_fn.getParam(llvm_arg_i);
2414 llvm_fn.addByValAttr(llvm_arg_i, param.typeOf().getElementType());
2415 }
2416
2417 return llvm_fn;2418 return llvm_fn;
2418 }2419 }
24192420