@@ -59,25 +59,26 @@ convertPtrAddOp(PtrAddOp ptrAddOp, llvm::IRBuilderBase &builder,
5959 if (!basePtr || !offset)
6060 return ptrAddOp.emitError (" Failed to lookup operands" );
6161
62- // Create GEP instruction for pointer arithmetic
63- auto *gep = cast<llvm::GetElementPtrInst>(
64- builder.CreateGEP (builder.getInt8Ty (), basePtr, {offset}));
65-
66- // Set the appropriate flags
62+ // Create the GEP flags
63+ llvm::GEPNoWrapFlags gepFlags;
6764 switch (ptrAddOp.getFlags ()) {
6865 case ptr::PtrAddFlags::none:
6966 break ;
7067 case ptr::PtrAddFlags::nusw:
71- gep-> setNoWrapFlags ( llvm::GEPNoWrapFlags::noUnsignedSignedWrap () );
68+ gepFlags = llvm::GEPNoWrapFlags::noUnsignedSignedWrap ();
7269 break ;
7370 case ptr::PtrAddFlags::nuw:
74- gep-> setNoWrapFlags ( llvm::GEPNoWrapFlags::noUnsignedWrap () );
71+ gepFlags = llvm::GEPNoWrapFlags::noUnsignedWrap ();
7572 break ;
7673 case ptr::PtrAddFlags::inbounds:
77- gep-> setNoWrapFlags ( llvm::GEPNoWrapFlags::inBounds () );
74+ gepFlags = llvm::GEPNoWrapFlags::inBounds ();
7875 break ;
7976 }
8077
78+ // Create GEP instruction for pointer arithmetic
79+ llvm::Value *gep =
80+ builder.CreateGEP (builder.getInt8Ty (), basePtr, {offset}, " " , gepFlags);
81+
8182 moduleTranslation.mapValue (ptrAddOp.getResult (), gep);
8283 return success ();
8384}
@@ -96,9 +97,7 @@ static LogicalResult convertLoadOp(LoadOp loadOp, llvm::IRBuilderBase &builder,
9697 return loadOp.emitError (" Failed to convert result type" );
9798
9899 // Create the load instruction.
99- llvm::MaybeAlign alignment = loadOp.getAlignment ()
100- ? llvm::MaybeAlign (*loadOp.getAlignment ())
101- : llvm::MaybeAlign ();
100+ llvm::MaybeAlign alignment (loadOp.getAlignment ().value_or (0 ));
102101 llvm::LoadInst *loadInst = builder.CreateAlignedLoad (
103102 resultType, ptr, alignment, loadOp.getVolatile_ ());
104103
@@ -147,9 +146,7 @@ convertStoreOp(StoreOp storeOp, llvm::IRBuilderBase &builder,
147146 return storeOp.emitError (" Failed to lookup operands" );
148147
149148 // Create the store instruction.
150- llvm::MaybeAlign alignment = storeOp.getAlignment ()
151- ? llvm::MaybeAlign (*storeOp.getAlignment ())
152- : llvm::MaybeAlign ();
149+ llvm::MaybeAlign alignment (storeOp.getAlignment ().value_or (0 ));
153150 llvm::StoreInst *storeInst =
154151 builder.CreateAlignedStore (value, ptr, alignment, storeOp.getVolatile_ ());
155152
@@ -221,16 +218,16 @@ class PtrDialectLLVMIRTranslationInterface
221218 LLVM::ModuleTranslation &moduleTranslation) const final {
222219
223220 return llvm::TypeSwitch<Operation *, LogicalResult>(op)
224- .Case <PtrAddOp> ([&](PtrAddOp ptrAddOp) {
221+ .Case ([&](PtrAddOp ptrAddOp) {
225222 return convertPtrAddOp (ptrAddOp, builder, moduleTranslation);
226223 })
227- .Case <LoadOp> ([&](LoadOp loadOp) {
224+ .Case ([&](LoadOp loadOp) {
228225 return convertLoadOp (loadOp, builder, moduleTranslation);
229226 })
230- .Case <StoreOp> ([&](StoreOp storeOp) {
227+ .Case ([&](StoreOp storeOp) {
231228 return convertStoreOp (storeOp, builder, moduleTranslation);
232229 })
233- .Case <TypeOffsetOp> ([&](TypeOffsetOp typeOffsetOp) {
230+ .Case ([&](TypeOffsetOp typeOffsetOp) {
234231 return convertTypeOffsetOp (typeOffsetOp, builder, moduleTranslation);
235232 })
236233 .Default ([&](Operation *op) {
0 commit comments