[llvm-dev] Why am I getting FrameIndex:i64<0> when I have no i64's?

Robert Baruch via llvm-dev llvm-dev at lists.llvm.org
Wed Nov 1 21:20:42 PDT 2017


Here's the IR I'm trying to compile for my backend, a 16-bit CPU:

; ModuleID = 'foo.c'
source_filename = "foo.c"
target datalayout =
"E-m:e-p16:16:16-i1:16:16-i8:16:16-i16:16:16-i32:16:16-i64:16:16-S16-n16"
target triple = "tms9900"

@global_var = common global i16 0, align 2

; Function Attrs: noinline nounwind optnone
define signext i16 @dothis(i16 signext %a) #0 {
entry:
  %a.addr = alloca i16, align 2
  store i16 %a, i16* %a.addr, align 2
  %0 = load i16, i16* @global_var, align 2
  %1 = load i16, i16* %a.addr, align 2
  %add = add nsw i16 %0, %1
  ret i16 %add
}

attributes #0 = { noinline nounwind optnone
"correctly-rounded-divide-sqrt-fp-math"="false"
"disable-tail-calls"="false" "less-precise-fpmad"="false"
"no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"
"no-infs-fp-math"="false" "no-jump-tables"="false"
"no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false"
"no-trapping-math"="false" "stack-protector-buffer-size"="8"
"unsafe-fp-math"="false" "use-soft-float"="false" }

!llvm.module.flags = !{!0}
!llvm.ident = !{!1}

!0 = !{i32 1, !"wchar_size", i32 2}
!1 = !{!"clang version 6.0.0 (trunk 315731) (llvm/trunk 316278)"}

So far, so good. Now, when I try to compile this:

build/bin/llc -march tms9900 -filetype=asm foo.bc -view-dag-combine1-dags
-debug -O0

...
Initial selection DAG: BB#0 'dothis:entry'
SelectionDAG has 17 nodes:
  t0: ch = EntryToken
  t2: i16,ch = CopyFromReg t0, Register:i16 %vreg0
  t6: i64 = Constant<0>
  t8: ch = store<ST2[%a.addr]> t0, t2, FrameIndex:i64<0>, undef:i64
      t4: ch = CopyToReg t0, Register:i16 %vreg1, t2
    t13: ch = TokenFactor t4, t8
      t10: i16,ch = load<LD2[@global_var](dereferenceable)> t8,
GlobalAddress:i64<i16* @global_var> 0, undef:i64
      t11: i16,ch = load<LD2[%a.addr](dereferenceable)> t8,
FrameIndex:i64<0>, undef:i64
    t12: i16 = add nsw t10, t11
  t15: ch,glue = CopyToReg t13, Register:i16 %R5, t12
  t16: ch = TMS9900ISD::Ret t15, Register:i16 %R5, t15:1
...

Where are the i64's coming from?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20171102/a4f040e7/attachment.html>


More information about the llvm-dev mailing list