[llvm] 3cb7e7b - BPF: fix a CORE optimization bug

Yonghong Song via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 20 20:10:45 PDT 2020



On 4/20/20 8:09 PM, Tom Stellard wrote:
> On 04/20/2020 08:08 PM, Yonghong Song wrote:
>>
>>
>> On 4/20/20 8:05 PM, Tom Stellard wrote:
>>> On 04/20/2020 08:04 PM, Yonghong Song via llvm-commits wrote:
>>>>
>>>> Author: Yonghong Song
>>>> Date: 2020-04-20T19:54:51-07:00
>>>> New Revision: 3cb7e7bf959dcd3b8080986c62e10a75c7af43f0
>>>>
>>>
>>> Should we backport this to the release/10.x branch?
>>
>> Yes. This is my plan. I did not find any information about 10.0.1
>> release ticket number. Do you have a tracking ticket number I can use
>> to track this backport?
>>
> 
> This is the tracking bug:
> 
> https://urldefense.proofpoint.com/v2/url?u=https-3A__bugs.llvm.org_show-5Fbug.cgi-3Fid-3Drelease-2D10.0.1&d=DwICaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=6PpsoSz8956IvY79L2aJGAaAqchgGsGiGNqZiyzZfi4&s=v_jfDAcjhNDQbJ6nmrMtAAR19h-fjmg9CHHZdEYknL4&e=

Thanks, will do file a backport ticket today!

> 
> -Tom
> 
>>>
>>> -Tom
>>>
>>>> URL: https://github.com/llvm/llvm-project/commit/3cb7e7bf959dcd3b8080986c62e10a75c7af43f0
>>>> DIFF: https://github.com/llvm/llvm-project/commit/3cb7e7bf959dcd3b8080986c62e10a75c7af43f0.diff
>>>>
>>>> LOG: BPF: fix a CORE optimization bug
>>>>
>>>> For the test case in this patch like below
>>>>     struct t { int a; } __attribute__((preserve_access_index));
>>>>     int foo(void *);
>>>>     int test(struct t *arg) {
>>>>         long param[1];
>>>>         param[0] = (long)&arg->a;
>>>>         return foo(param);
>>>>     }
>>>>
>>>> The IR right before BPF SimplifyPatchable phase:
>>>>     %1:gpr = LD_imm64 @"llvm.t:0:0$0:0"
>>>>     %2:gpr = LDD killed %1:gpr, 0
>>>>     %3:gpr = ADD_rr %0:gpr(tied-def 0), killed %2:gpr
>>>>     STD killed %3:gpr, %stack.0.param, 0
>>>> After SimplifyPatchable phase, the incorrect IR is generated:
>>>>     %1:gpr = LD_imm64 @"llvm.t:0:0$0:0"
>>>>     %3:gpr = ADD_rr %0:gpr(tied-def 0), killed %1:gpr
>>>>     CORE_MEM killed %3:gpr, 306, %0:gpr, @"llvm.t:0:0$0:0"
>>>>
>>>> Note that CORE_MEM pseudo op is introduced to encode
>>>> memory operations related to CORE. In the above, we intend
>>>> to check whether we have a store like
>>>>      *(%3:gpr + 0) = ...
>>>> and if this is the case, we could replace it with
>>>>      *(%0:gpr + @"llvm.t:0:0$0:0"_ = ...
>>>>
>>>> Unfortunately, in the above, IR for the store is
>>>>      *(%stack.0.param + 0) = %3:gpr
>>>> and transformation should not happen.
>>>>
>>>> Note that we won't have problem if the actual CORE
>>>> dereference (arg->a) happens.
>>>>
>>>> This patch fixed the problem by skip CORE optimization if
>>>> the use of ADD_rr result is not the base address of the store
>>>> operation.
>>>>
>>>> Differential Revision: https://urldefense.proofpoint.com/v2/url?u=https-3A__reviews.llvm.org_D78466&d=DwICaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=DA8e1B5r073vIqRrFz7MRA&m=M4_uRgblk7fIvBK0OPXqlguO1L7b3oP5ZH_bYDGtD4k&s=SD4faapHI4Z__Jhwpfz7s4ro7MFn1w7vfMCvalkow_k&e=
>>>>
>>>> Added:
>>>>       llvm/test/CodeGen/BPF/CORE/store-addr.ll
>>>>
>>>> Modified:
>>>>       llvm/lib/Target/BPF/BPFMISimplifyPatchable.cpp
>>>>
>>>> Removed:
>>>>      
>>>>
>>>> ################################################################################
>>>> diff  --git a/llvm/lib/Target/BPF/BPFMISimplifyPatchable.cpp b/llvm/lib/Target/BPF/BPFMISimplifyPatchable.cpp
>>>> index 29abc9303a62..b2ecb531db9d 100644
>>>> --- a/llvm/lib/Target/BPF/BPFMISimplifyPatchable.cpp
>>>> +++ b/llvm/lib/Target/BPF/BPFMISimplifyPatchable.cpp
>>>> @@ -116,11 +116,22 @@ void BPFMISimplifyPatchable::checkADDrr(MachineRegisterInfo *MRI,
>> [...]
>>
> 


More information about the llvm-commits mailing list