[PATCH] D16867: Debug Info: Allow SROAed complex floating point types to be described by constants

Adrian Prantl via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 4 09:56:37 PST 2016


aprantl added a comment.

You're correct, it looks like there is also a bug in SROA / Local that is causing the imaginary part to be dropped:

- IR Dump After Simplify the CFG ***

; Function Attrs: nounwind optsize
define arm_aapcscc void @f([2 x i64] %c.coerce) #0 !dbg !4 {
entry:

  %c = alloca { double, double }, align 8
  %0 = bitcast { double, double }* %c to [2 x i64]*
  store [2 x i64] %c.coerce, [2 x i64]* %0, align 8
  call void @llvm.dbg.declare(metadata { double, double }* %c, metadata !10, metadata !16), !dbg !17
  %c.realp = getelementptr inbounds { double, double }, { double, double }* %c, i32 0, i32 0, !dbg !17
  %c.imagp = getelementptr inbounds { double, double }, { double, double }* %c, i32 0, i32 1, !dbg !17
  store double 0.000000e+00, double* %c.realp, align 8, !dbg !17
  store double 0.000000e+00, double* %c.imagp, align 8, !dbg !17
  ret void, !dbg !17

}

- IR Dump After SROA ***

; Function Attrs: nounwind optsize
define arm_aapcscc void @f([2 x i64] %c.coerce) #0 !dbg !4 {
entry:

  %c.coerce.fca.0.extract = extractvalue [2 x i64] %c.coerce, 0
  call void @llvm.dbg.value(metadata i64 %c.coerce.fca.0.extract, i64 0, metadata !10, metadata !16), !dbg !17
  %c.coerce.fca.1.extract = extractvalue [2 x i64] %c.coerce, 1
  call void @llvm.dbg.value(metadata i64 %c.coerce.fca.1.extract, i64 0, metadata !10, metadata !18), !dbg !17
  call void @llvm.dbg.declare(metadata { double, double }* undef, metadata !10, metadata !19), !dbg !17
  call void @llvm.dbg.value(metadata i64 0, i64 0, metadata !10, metadata !16), !dbg !17
  ret void, !dbg !17

}


Repository:
  rL LLVM

http://reviews.llvm.org/D16867





More information about the llvm-commits mailing list