RFH: -global-isel-abort=1|2

I tried:

> cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang" -DCLANG_BOOTSTRAP_PASSTHROUGH="LLVM_TARGETS_TO_BUILD" -DCLANG_ENABLE_BOOTSTRAP=On -DBOOTSTRAP_CMAKE_CXX_FLAGS='-march=native -mllvm -global-isel-abort=1 ' ./llvm
> ninja stage2

There are a lot of fallbacks, but they are no really helpful. It never said: failed to select G_ICMP with …
or failed to legalize G_ICMP with …

Is there a verbose flag? The X86 instruction selector ends with:

Could a MF.dump() help? I didn’t get any insightful remarks out of it.

Any ideas? Thanks!

The remarks need to be enabled. In tests we use -pass-remarks-missed=‘gisel*’ to llc to print the remarks. I’m also not sure if that will be of any use with -global-isel-abort=1. -global-isel-abort=2 enables the fallback, which definitely produces remarks

It does not really work.

> cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang" -DCLANG_BOOTSTRAP_PASSTHROUGH="LLVM_TARGETS_TO_BUILD" -DCLANG_ENABLE_BOOTSTRAP=On -DBOOTSTRAP_CMAKE_CXX_FLAGS="-march=native -fglobal-isel -mllvm -global-isel-abort=2 -mllvm -pass-remarks-missed='gisel*'" ./llvm

All I get is:
warning: Instruction selection used fallback path for _ZN4llvm4yaml7yamlizeItEENSt3__19enable_ifIXsr16has_ScalarTraitsIT_EE5valueEvE4typeERNS0_2IOERS4_bRNS0_12EmptyContextE [-Wbackend-plugin]
warning: Instruction selection used fallback path for ZN4llvm4yaml13MappingTraitsINS_6AMDGPU5HSAMD6Kernel10DebugProps8MetadataEE7mappingERNS0_2IOERS6 [-Wbackend-plugin]
warning: Instruction selection used fallback path for _ZNSt3__16vectorIN4llvm6AMDGPU5HSAMD6Kernel8MetadataENS_9allocatorIS5_EEE8__appendEm [-Wbackend-plugin]
warning: Instruction selection used fallback path for _ZNSt3__16vectorIN4llvm6AMDGPU5HSAMD6Kernel8MetadataENS_9allocatorIS5_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS5_RS7_EE [-Wbackend-plugin]
warning: Instruction selection used fallback path for _ZN4llvm6AMDGPU5HSAMD6Kernel8MetadataD2Ev [-Wbackend-plugin]

Maybe something isn’t wired up correctly for the remarks in clang? If I use llc on a sample I see the context instruction that failed:

$ llc -global-isel -global-isel-abort=2 -pass-remarks-missed='.*' -o /dev/null /tmp/arst.ll  
remark: <unknown>:0:0: unable to legalize instruction: %0:_(<2 x s32>), %2:_(<2 x s32>) = G_UNMERGE_VALUES %1:_(<4 x s32>) (in function: foo)
warning: Instruction selection used fallback path for foo

Thanks! I finally got it to work. It looks slightly different from the your flags, but it should be a useful tool for others in the future

remark: unable to translate instruction: call: '  tail call void @_ZdlPv(ptr noundef nonnull %0) #17, !dbg !13' [-Rpass-missed=gisel-irtranslator]
remark: unable to legalize instruction: %69:_(s64), %70:_(s1) = G_UADDO %66:_, %68:_ [-Rpass-missed=gisel-legalize]
remark: unable to translate instruction: call: '  tail call void @abort() #12, !dbg !113' [-Rpass-missed=gisel-irtranslator]
 remark: unable to legalize instruction: G_MEMSET %68:_(p0), %17:_(s8), %16:_(s64), 1 :: (store (s8) into %ir.52, align 8) [-Rpass-missed=gisel-legalize]

I will spend some time looking into the G_UADDO!

For reference:

cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang" -DCLANG_BOOTSTRAP_PASSTHROUGH="LLVM_TARGETS_TO_BUILD" -DCLANG_ENABLE_BOOTSTRAP=On -DBOOTSTRAP_CMAKE_CXX_FLAGS="-march=native -Rpass-missed='gisel*' -fglobal-isel -mllvm -global-isel-abort=2" ./llvm

Note the -Rpass-missed!