llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
28.7k stars 11.87k forks source link

[SDAG] [X86_64] Instruction selection fails when incorrect locality argument is used for __builtin_ia32_prefetchi. #109941

Open venkataramananhashkumar opened 1 month ago

venkataramananhashkumar commented 1 month ago

Reference

Test case:

int bar();
int  foo(){
__builtin_ia32_prefetchi(&bar,0);
 return 0;
}

Flag : -march=znver5

fatal error: error in backend: Cannot select: 0xd34d640: ch = Prefetch<(load (s8) from @bar)> 0xd2944a0, 0xd34d720, TargetConstant:i32<0>, TargetConstant:i32<0>, TargetConstant:i32<0>, example.c:3:1
  0xd34d720: i64 = X86ISD::WrapperRIP TargetGlobalAddress:i64<ptr @bar> 0, example.c:3:1
    0xd34d6b0: i64 = TargetGlobalAddress<ptr @bar> 0, example.c:3:1
  0xd34d5d0: i32 = TargetConstant<0>
  0xd34d5d0: i32 = TargetConstant<0>
  0xd34d5d0: i32 = TargetConstant<0>
In function: foo
llvmbot commented 1 month ago

@llvm/issue-subscribers-backend-x86

Author: None (venkataramananhashkumar)

[Reference](https://godbolt.org/z/8PKdb475M) Test case: ---snip--- int bar(); int foo(){ __builtin_ia32_prefetchi(&bar,0); return 0; } --Snip-- Flag : -march=znver5 --Snip-- fatal error: error in backend: Cannot select: 0xd34d640: ch = Prefetch<(load (s8) from @bar)> 0xd2944a0, 0xd34d720, TargetConstant:i32<0>, TargetConstant:i32<0>, TargetConstant:i32<0>, example.c:3:1 0xd34d720: i64 = X86ISD::WrapperRIP TargetGlobalAddress:i64<ptr @bar> 0, example.c:3:1 0xd34d6b0: i64 = TargetGlobalAddress<ptr @bar> 0, example.c:3:1 0xd34d5d0: i32 = TargetConstant<0> 0xd34d5d0: i32 = TargetConstant<0> 0xd34d5d0: i32 = TargetConstant<0> In function: foo --Snip---