Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › zig/ › llvm/ › Builder.zig › splatConstAssumeCapacity
splatConstAssumeCapacity
Builder.splatConstAssumeCapacity
fn splatConstAssumeCapacity (self : *Builder , ty : Type , val : Constant ) Constant
File
Code
fn splatConstAssumeCapacity (self : *Builder , ty : Type , val : Constant ) Constant {
assert (ty .scalarType (self ) == val .typeOf (self ));
if (!ty .isVector (self )) return val ;
if (val .isZeroInit (self )) return self .zeroInitConstAssumeCapacity (ty );
const Adapter = struct {
builder : *const Builder ,
pub fn hash (_ : @This (), key : Constant .Splat ) u32 {
return @truncate (std .hash .Wyhash .hash (
comptime std .hash .int (@backingInt (Constant .Tag .splat )),
std .mem .asBytes (&key ),
));
}
pub fn eql (ctx : @This (), lhs_key : Constant .Splat , _ : void , rhs_index : usize ) bool {
if (ctx .builder .constant_items .items (.tag )[rhs_index ] != .splat ) return false ;
const rhs_data = ctx .builder .constant_items .items (.data )[rhs_index ];
const rhs_extra = ctx .builder .constantExtraData (Constant .Splat , rhs_data );
return std .meta .eql (lhs_key , rhs_extra );
}
};
const data = Constant .Splat { .type = ty , .value = val };
const gop = self .constant_map .getOrPutAssumeCapacityAdapted (data , Adapter { .builder = self });
if (!gop .found_existing ) {
gop .key_ptr .* = {};
gop .value_ptr .* = {};
self .constant_items .appendAssumeCapacity (.{
.tag = .splat ,
.data = self .addConstantExtraAssumeCapacity (data ),
});
}
return @fromBackingInt (@intCast (gop .index ));
}