This is an archive of the discontinued LLVM Phabricator instance.

BPF: provide better error message for unsupported atomic operations
ClosedPublic

Authored by yonghong-song on Mar 11 2021, 5:11 PM.

Details

Summary

Currently, BPF backend does not support all variants of

atomic_load_{add,and,or,xor}, atomic_swap and atomic_cmp_swap

For example, it only supports 32bit (with alu32 mode) and 64bit
operations for atomic_load_{and,or,xor}, atomic_swap and
atomic_cmp_swap. Due to historical reason, atomic_load_add is
always supported with 32bit and 64bit.

If user used an unsupported atomic operation, currently,
codegen selectiondag cannot find bpf support and will issue
a fatal error. This is not user friendly as user may mistakenly
think this is a compiler bug.

This patch added Custom rule for unsupported atomic operations
and will emit better error message during ReplaceNodeResults()
callback. The following is an example output.

$ cat t.c 
short sync(short *p) {
  return  __sync_val_compare_and_swap (p, 2, 3); 
}
$ clang -target bpf -O2 -g -c t.c 
t.c:2:11: error: Unsupported atomic operations, please use 64 bit version
  return  __sync_val_compare_and_swap (p, 2, 3); 
          ^   
fatal error: error in backend: Cannot select: t19: i64,ch =
  AtomicCmpSwap<(load store seq_cst seq_cst 2 on %ir.p)> t0, t2, 
  Constant:i64<2>, Constant:i64<3>, t.c:2:11
  t2: i64,ch = CopyFromReg t0, Register:i64 %0
    t1: i64 = Register %0
  t11: i64 = Constant<2>
  t10: i64 = Constant<3>
In function: sync
PLEASE submit a bug report ... 

Fatal error will still happen since we did not really do proper
lowering for these unsupported atomic operations. But we do get
a much better error message.

Diff Detail

Event Timeline

yonghong-song created this revision.Mar 11 2021, 5:11 PM
yonghong-song requested review of this revision.Mar 11 2021, 5:11 PM
Herald added a project: Restricted Project. · View Herald TranscriptMar 11 2021, 5:11 PM
ast accepted this revision.Mar 11 2021, 6:31 PM
This revision is now accepted and ready to land.Mar 11 2021, 6:31 PM
This revision was landed with ongoing or failed builds.Mar 11 2021, 7:27 PM
This revision was automatically updated to reflect the committed changes.