[PATCH] D62555: [TailDuplicator] prevent tail duplication for INLINEASM_BR

Eli Friedman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri May 31 13:25:16 PDT 2019


efriedma added a comment.

The following testcase still crashes with this patch.  Given that, I don't think it makes sense to merge this patch; even if it lets some current version kernel build, someone else is likely to hit the same issue in the near future.

  target triple = "arm-linux-gnueabi"
  @a = external dso_local local_unnamed_addr global i32*, align 4
  @c = external dso_local local_unnamed_addr global i32, align 4
  
  define dso_local i32 @f() #0 {
  entry:
    %0 = load i32, i32* @c, align 4
    %tobool = icmp eq i32 %0, 0
    %1 = load i32*, i32** @a, align 4
    br i1 %tobool, label %if.else, label %if.then
  
  if.then:                                          ; preds = %entry
    tail call void asm sideeffect "str $1, $0", "*Qo,r"(i32* %1, i32 1) #1
    callbr void asm sideeffect "", "X"(i8* blockaddress(@f, %g)) #1
            to label %asm.fallthrough [label %g]
  
  if.else:                                          ; preds = %entry
    tail call void asm sideeffect "str $1, $0", "*Qo,r"(i32* %1, i32 0) #1
    callbr void asm sideeffect "", "X"(i8* blockaddress(@f, %g)) #1
            to label %asm.fallthrough [label %g]
  
  asm.fallthrough:                                  ; preds = %if.end
    unreachable
  
  g:                                                ; preds = %if.end
    ret i32 undef
  }
  
  attributes #0 = { "use-soft-float"="false" }
  attributes #1 = { nounwind }


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62555/new/

https://reviews.llvm.org/D62555





More information about the llvm-commits mailing list