<div dir="ltr"><div>Here's the IR I'm trying to compile for my backend, a 16-bit CPU:</div><div><br></div><div><div><font face="monospace">; ModuleID = 'foo.c'</font></div><div><font face="monospace">source_filename = "foo.c"</font></div><div><font face="monospace">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"</font></div><div><font face="monospace">target triple = "tms9900"</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">@global_var = common global i16 0, align 2</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">; Function Attrs: noinline nounwind optnone</font></div><div><font face="monospace">define signext i16 @dothis(i16 signext %a) #0 {</font></div><div><font face="monospace">entry:</font></div><div><font face="monospace">  %a.addr = alloca i16, align 2</font></div><div><font face="monospace">  store i16 %a, i16* %a.addr, align 2</font></div><div><font face="monospace">  %0 = load i16, i16* @global_var, align 2</font></div><div><font face="monospace">  %1 = load i16, i16* %a.addr, align 2</font></div><div><font face="monospace">  %add = add nsw i16 %0, %1</font></div><div><font face="monospace">  ret i16 %add</font></div><div><font face="monospace">}</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">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" }</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">!llvm.module.flags = !{!0}</font></div><div><font face="monospace">!llvm.ident = !{!1}</font></div><div><font face="monospace"><br></font></div><div><font face="monospace">!0 = !{i32 1, !"wchar_size", i32 2}</font></div><div><font face="monospace">!1 = !{!"clang version 6.0.0 (trunk 315731) (llvm/trunk 316278)"}</font></div></div><div><br></div><div>So far, so good. Now, when I try to compile this:</div><div><br></div><div><font face="monospace">build/bin/llc -march tms9900 -filetype=asm foo.bc -view-dag-combine1-dags -debug -O0<br></font></div><div><br></div><div><font face="monospace">...</font></div><div><div><font face="monospace">Initial selection DAG: BB#0 'dothis:entry'</font></div><div><font face="monospace">SelectionDAG has 17 nodes:</font></div><div><font face="monospace">  t0: ch = EntryToken</font></div><div><font face="monospace">  t2: i16,ch = CopyFromReg t0, Register:i16 %vreg0</font></div><div><font face="monospace">  t6: i64 = Constant<0></font></div><div><font face="monospace">  t8: ch = store<ST2[%a.addr]> t0, t2, FrameIndex:i64<0>, undef:i64</font></div><div><font face="monospace">      t4: ch = CopyToReg t0, Register:i16 %vreg1, t2</font></div><div><font face="monospace">    t13: ch = TokenFactor t4, t8</font></div><div><font face="monospace">      t10: i16,ch = load<LD2[@global_var](dereferenceable)> t8, GlobalAddress:i64<i16* @global_var> 0, undef:i64</font></div><div><font face="monospace">      t11: i16,ch = load<LD2[%a.addr](dereferenceable)> t8, FrameIndex:i64<0>, undef:i64</font></div><div><font face="monospace">    t12: i16 = add nsw t10, t11</font></div><div><font face="monospace">  t15: ch,glue = CopyToReg t13, Register:i16 %R5, t12</font></div><div><font face="monospace">  t16: ch = TMS9900ISD::Ret t15, Register:i16 %R5, t15:1</font></div></div><div><font face="monospace">...</font></div><div><br></div><div>Where are the i64's coming from?</div><div><br></div></div>