@@ -1766,7 +1766,8 @@ void ModuleTranslation::setAliasScopeMetadata(AliasAnalysisOpInterface op,
1766
1766
llvm::LLVMContext::MD_noalias);
1767
1767
}
1768
1768
1769
- llvm::MDNode *ModuleTranslation::getTBAANode (TBAATagAttr tbaaAttr) const {
1769
+ // llvm::MDNode *ModuleTranslation::getTBAANode(TBAATagAttr tbaaAttr) const {
1770
+ llvm::MDNode *ModuleTranslation::getTBAANode (Attribute tbaaAttr) const {
1770
1771
return tbaaMetadataMapping.lookup (tbaaAttr);
1771
1772
}
1772
1773
@@ -1786,7 +1787,8 @@ void ModuleTranslation::setTBAAMetadata(AliasAnalysisOpInterface op,
1786
1787
return ;
1787
1788
}
1788
1789
1789
- llvm::MDNode *node = getTBAANode (cast<TBAATagAttr>(tagRefs[0 ]));
1790
+ // llvm::MDNode *node = getTBAANode(cast<TBAATagAttr>(tagRefs[0]));
1791
+ llvm::MDNode *node = getTBAANode (tagRefs[0 ]);
1790
1792
inst->setMetadata (llvm::LLVMContext::MD_tbaa, node);
1791
1793
}
1792
1794
@@ -1806,6 +1808,7 @@ void ModuleTranslation::setBranchWeightsMetadata(BranchWeightOpInterface op) {
1806
1808
LogicalResult ModuleTranslation::createTBAAMetadata () {
1807
1809
llvm::LLVMContext &ctx = llvmModule->getContext ();
1808
1810
llvm::IntegerType *offsetTy = llvm::IntegerType::get (ctx, 64 );
1811
+ llvm::IntegerType *sizeTy = llvm::IntegerType::get (ctx, 64 );
1809
1812
1810
1813
// Walk the entire module and create all metadata nodes for the TBAA
1811
1814
// attributes. The code below relies on two invariants of the
@@ -1833,6 +1836,23 @@ LogicalResult ModuleTranslation::createTBAAMetadata() {
1833
1836
tbaaMetadataMapping.insert ({descriptor, llvm::MDNode::get (ctx, operands)});
1834
1837
});
1835
1838
1839
+ walker.addWalk ([&](TBAATypeNodeAttr descriptor) {
1840
+ SmallVector<llvm::Metadata *> operands;
1841
+ operands.push_back (tbaaMetadataMapping.lookup (descriptor.getParent ()));
1842
+ operands.push_back (llvm::ConstantAsMetadata::get (
1843
+ llvm::ConstantInt::get (sizeTy, descriptor.getSize ())));
1844
+ operands.push_back (llvm::MDString::get (ctx, descriptor.getId ()));
1845
+ for (auto field : descriptor.getFields ()) {
1846
+ operands.push_back (tbaaMetadataMapping.lookup (field.getTypeDesc ()));
1847
+ operands.push_back (llvm::ConstantAsMetadata::get (
1848
+ llvm::ConstantInt::get (offsetTy, field.getOffset ())));
1849
+ operands.push_back (llvm::ConstantAsMetadata::get (
1850
+ llvm::ConstantInt::get (sizeTy, field.getSize ())));
1851
+ }
1852
+
1853
+ tbaaMetadataMapping.insert ({descriptor, llvm::MDNode::get (ctx, operands)});
1854
+ });
1855
+
1836
1856
walker.addWalk ([&](TBAATagAttr tag) {
1837
1857
SmallVector<llvm::Metadata *> operands;
1838
1858
@@ -1848,6 +1868,20 @@ LogicalResult ModuleTranslation::createTBAAMetadata() {
1848
1868
tbaaMetadataMapping.insert ({tag, llvm::MDNode::get (ctx, operands)});
1849
1869
});
1850
1870
1871
+ walker.addWalk ([&](TBAAAccessTagAttr tag) {
1872
+ SmallVector<llvm::Metadata *> operands;
1873
+
1874
+ operands.push_back (tbaaMetadataMapping.lookup (tag.getBaseType ()));
1875
+ operands.push_back (tbaaMetadataMapping.lookup (tag.getAccessType ()));
1876
+
1877
+ operands.push_back (llvm::ConstantAsMetadata::get (
1878
+ llvm::ConstantInt::get (offsetTy, tag.getOffset ())));
1879
+ operands.push_back (llvm::ConstantAsMetadata::get (
1880
+ llvm::ConstantInt::get (sizeTy, tag.getSize ())));
1881
+
1882
+ tbaaMetadataMapping.insert ({tag, llvm::MDNode::get (ctx, operands)});
1883
+ });
1884
+
1851
1885
mlirModule->walk ([&](AliasAnalysisOpInterface analysisOpInterface) {
1852
1886
if (auto attr = analysisOpInterface.getTBAATagsOrNull ())
1853
1887
walker.walk (attr);
0 commit comments