MCPcopy Create free account
hub / github.com/google/gapid / validateTargetData

Method validateTargetData

core/codegen/output.go:74–127  ·  view source on GitHub ↗
(td llvm.TargetData)

Source from the content-addressed store, hash-verified

72}
73
74func (m *Module) validateTargetData(td llvm.TargetData) {
75 abi := m.target
76 errs := []string{}
77 check := func(llvm, gapid interface{}, name string) bool {
78 if reflect.DeepEqual(llvm, gapid) {
79 return true
80 }
81 errs = append(errs, fmt.Sprintf("%v target mismatch for %v: %v (llvm) != %v (gapid)", name, abi.Name, llvm, gapid))
82 return false
83 }
84 checkTD := func(ty Type, dtl *device.DataTypeLayout) {
85 check(td.TypeStoreSize(ty.llvmTy()), uint64(dtl.Size), ty.String()+"-size")
86 check(td.ABITypeAlignment(ty.llvmTy()), int(dtl.Alignment), ty.String()+"-align")
87 }
88
89 layout := abi.MemoryLayout
90 isLE := td.ByteOrder() == llvm.LittleEndian
91 check(isLE, layout.Endian == device.LittleEndian, "is-little-endian")
92 check(td.PointerSize(), int(layout.Pointer.Size), "pointer-size")
93
94 checkTD(m.Types.Pointer(m.Types.Int), layout.Pointer)
95 checkTD(m.Types.Int, layout.Integer)
96 checkTD(m.Types.Size, layout.Size)
97 checkTD(m.Types.Int64, layout.I64)
98 checkTD(m.Types.Int32, layout.I32)
99 checkTD(m.Types.Int16, layout.I16)
100 checkTD(m.Types.Int8, layout.I8)
101 checkTD(m.Types.Float32, layout.F32)
102 checkTD(m.Types.Float64, layout.F64)
103
104 for _, s := range m.Types.structs {
105 if !s.hasBody {
106 continue
107 }
108 if !check(int(td.TypeStoreSize(s.llvm))*8, s.SizeInBits(), fmt.Sprintf("%v-size", s.name)) ||
109 !check(int(td.ABITypeAlignment(s.llvm))*8, s.AlignInBits(), fmt.Sprintf("%v-align", s.name)) {
110 errs = append(errs, fmt.Sprintf("%v: %v", s.name, s))
111 }
112 for i := range s.Fields() {
113 llvm := int(td.ElementOffset(s.llvm, i)) * 8
114 gapid := s.FieldOffsetInBits(i)
115 check(llvm, gapid, fmt.Sprintf("%v-field-offset %d", s.name, i))
116 }
117 }
118
119 for _, s := range m.Types.arrays {
120 check(int(td.TypeStoreSize(s.llvm))*8, s.SizeInBits(), fmt.Sprintf("%v-size", s.name))
121 check(int(td.ABITypeAlignment(s.llvm))*8, s.AlignInBits(), fmt.Sprintf("%v-align", s.name))
122 }
123
124 if len(errs) > 0 {
125 panic(fmt.Errorf("%v has ABI mismatches!\n%v", abi.Name, strings.Join(errs, "\n")))
126 }
127}
128
129// Optimize optimizes the module.
130func (m *Module) Optimize() {

Callers 2

ObjectMethod · 0.95
ExecutorMethod · 0.95

Calls 10

DeepEqualMethod · 0.80
FieldsMethod · 0.80
FieldOffsetInBitsMethod · 0.80
llvmTyMethod · 0.65
StringMethod · 0.65
SizeInBitsMethod · 0.65
AlignInBitsMethod · 0.65
checkFunction · 0.50
PointerMethod · 0.45
JoinMethod · 0.45

Tested by

no test coverage detected