search for: simplifymemtransfer

Displaying 11 results from an estimated 11 matches for "simplifymemtransfer".

2015 Aug 19
3
[RFC] Generalize llvm.memcpy / llvm.memmove intrinsics.
...calls) would have mapPerfectlyAlias set to '0'. This change is motivated by poor optimization for small memcpys on targets with strict alignment requirements. When a user writes a small, unaligned memcpy we may transform it into an unaligned load/store pair in instcombine (See InstCombine::SimplifyMemTransfer), which is then broken up into an unwieldy series of smaller loads and stores during legalization. I have a fix for this issue which tags the pointers for unaligned load/store pairs with noalias metadata allowing CodeGen to produce better code during legalization, but it's not safe to apply whi...
2017 Oct 18
2
RFC: Generate plain !tbaa tags in place of !tbaa.struct ones
...regate, we leave resulting loads and stores undecorated, meaning optimization of such instructions cannot benefit from TBAA. Furthermore, our analysis indicates that the only place where !tbaa.struct tags may potentially impact code generation is simplification of memcpy() and memmove() calls, see SimplifyMemTransfer() in InstCombineCalls.cpp. Ironically, what the code that makes that sole use of such tags is trying to do is to construct a !tbaa tag from the information encoded in the given !tbaa.struct tag. Note that it can only do that if the !tbaa.struct tag describes a structure with a single member of a sc...
2017 Oct 31
2
RFC: Generate plain !tbaa tags in place of !tbaa.struct ones
...issing some information that is essential for that purpose? > >  -Hal > >> >> Furthermore, our analysis indicates that the only place where >> !tbaa.struct tags may potentially impact code generation is >> simplification of memcpy() and memmove() calls, see >> SimplifyMemTransfer() in InstCombineCalls.cpp. Ironically, what >> the code that makes that sole use of such tags is trying to do is >> to construct a !tbaa tag from the information encoded in the >> given !tbaa.struct tag. Note that it can only do that if the >> !tbaa.struct tag describes a st...
2017 May 16
4
Which pass should be propagating memory copies
Consider the following IR example: define void @simple([4 x double] *%ptr, i64 %idx) { %stack = alloca [4 x double] %ptri8 = bitcast [4 x double] *%ptr to i8* %stacki8 = bitcast [4 x double] *%stack to i8* call void @llvm.memcpy.p0i8.p0i8.i32(i8 *%stacki8, i8 *%ptri8, i32 32, i32 0, i1 0) %dataptr = getelementptr inbounds [4 x double], [4 x double] *%ptr, i32 0, i64 %idx
2015 Aug 19
2
[RFC] Generalize llvm.memcpy / llvm.memmove intrinsics.
...mapPerfectlyAlias set to '0'. >> >> This change is motivated by poor optimization for small memcpys on targets with strict alignment requirements. When a user writes a small, unaligned memcpy we may transform it into an unaligned load/store pair in instcombine (See InstCombine::SimplifyMemTransfer), which is then broken up into an unwieldy series of smaller loads and stores during legalization. I have a fix for this issue which tags the pointers for unaligned load/store pairs with noalias metadata allowing CodeGen to produce better code during legalization, but it's not safe to apply whi...
2017 Oct 31
1
RFC: Generate plain !tbaa tags in place of !tbaa.struct ones
...for that >> purpose? >> >>  -Hal >> >>> >>> Furthermore, our analysis indicates that the only place where >>> !tbaa.struct tags may potentially impact code generation is >>> simplification of memcpy() and memmove() calls, see >>> SimplifyMemTransfer() in InstCombineCalls.cpp. Ironically, what >>> the code that makes that sole use of such tags is trying to do is >>> to construct a !tbaa tag from the information encoded in the >>> given !tbaa.struct tag. Note that it can only do that if the >>> !tbaa.struct ta...
2015 Aug 19
3
[RFC] Generalize llvm.memcpy / llvm.memmove intrinsics.
...is motivated by poor optimization for small memcpys on >>>> targets with strict alignment requirements. When a user writes a >>>> small, unaligned memcpy we may transform it into an unaligned >>>> load/store pair in instcombine (See >>>> InstCombine::SimplifyMemTransfer), which is then broken up into >>>> an unwieldy series of smaller loads and stores during >>>> legalization. I have a fix for this issue which tags the pointers >>>> for unaligned load/store pairs with noalias metadata allowing >>>> CodeGen to produce...
2015 Aug 20
3
[RFC] Generalize llvm.memcpy / llvm.memmove intrinsics.
...yAlias set to '0'. > > This change is motivated by poor optimization for small memcpys on > targets with strict alignment requirements. When a user writes a > small, unaligned memcpy we may transform it into an unaligned > load/store pair in instcombine (See > InstCombine::SimplifyMemTransfer), which is then broken up into > an unwieldy series of smaller loads and stores during > legalization. I have a fix for this issue which tags the pointers > for unaligned load/store pairs with noalias metadata allowing > CodeGen to produce better code during legalization, but it's n...
2017 Nov 02
2
RFC: Generate plain !tbaa tags in place of !tbaa.struct ones
...Hal >>>> >>>>> >>>>> Furthermore, our analysis indicates that the only place where >>>>> !tbaa.struct tags may potentially impact code generation is >>>>> simplification of memcpy() and memmove() calls, see >>>>> SimplifyMemTransfer() in InstCombineCalls.cpp. Ironically, what >>>>> the code that makes that sole use of such tags is trying to do is >>>>> to construct a !tbaa tag from the information encoded in the >>>>> given !tbaa.struct tag. Note that it can only do that if the >...
2015 Aug 21
3
[RFC] Generalize llvm.memcpy / llvm.memmove intrinsics.
...; > > > This change is motivated by poor optimization for small memcpys on > > targets with strict alignment requirements. When a user writes a > > small, unaligned memcpy we may transform it into an unaligned > > load/store pair in instcombine (See > > InstCombine::SimplifyMemTransfer), which is then broken up into > > an unwieldy series of smaller loads and stores during > > legalization. I have a fix for this issue which tags the pointers > > for unaligned load/store pairs with noalias metadata allowing > > CodeGen to produce better code during legaliza...
2015 Sep 08
2
[RFC] Generalize llvm.memcpy / llvm.memmove intrinsics.
...s change is motivated by poor optimization for small memcpys on > > > targets with strict alignment requirements. When a user writes a > > > small, unaligned memcpy we may transform it into an unaligned > > > load/store pair in instcombine (See > > > InstCombine::SimplifyMemTransfer), which is then broken up into > > > an unwieldy series of smaller loads and stores during > > > legalization. I have a fix for this issue which tags the pointers > > > for unaligned load/store pairs with noalias metadata allowing > > > CodeGen to produce better...