The example code:<br><br>; ModuleID = 'struct_2.bc'<br>target datalayout = "E-p:32:32:128-f64:64:128-f32:32:128-i64:32:128-i32:32:128-i16:16:128-i8:8:128-i1:8:128-a0:0:128-v128:128:128-s0:128:128"<br>target triple = "spu"<br>
<br>@boolvar = internal global i1 false<br><br>define void @set_boolvar() nounwind  {<br>entry:<br>        store i1 true, i1* @boolvar, align 16<br>        ret void<br>}<br><br>This gets legalized to:<br><br>=== set_boolvar<br>
Initial selection DAG:<br>SelectionDAG has 7 nodes:<br>  0xe00711c: i32 = Constant <0><br>      0xcc056f0: ch = EntryToken <br>      0xe00700c: i1 = Constant <-1><br>      0xe007094: i32 = GlobalAddress <i1* @boolvar> 0<br>
      0xe0071a4: i32 = undef <br>    0xe00722c: ch = store 0xcc056f0, 0xe00700c, 0xe007094, 0xe0071a4 <0xcc02bbc:0> alignment=16<br>  0xe0072b4: ch = ret 0xe00722c<br><br>Optimized lowered selection DAG:<br>SelectionDAG has 6 nodes:<br>
      0xcc056f0: ch = EntryToken <br>      0xe00700c: i1 = Constant <-1><br>      0xe007094: i32 = GlobalAddress <i1* @boolvar> 0<br>      0xe0071a4: i32 = undef <br>    0xe00722c: ch = store 0xcc056f0, 0xe00700c, 0xe007094, 0xe0071a4 <0xcc02bbc:0> alignment=16<br>
  0xe0072b4: ch = ret 0xe00722c<br><br>Legally typed node: 0xe0071a4: i32 = undef <br>Legally typed node: 0xe007094: i32 = GlobalAddress <i1* @boolvar> 0<br>Promote integer result: 0xe00700c: i1 = Constant <-1><br>
Legally typed node: 0xe00711c: i8 = Constant <1><br>Legally typed node: 0xcc056f0: ch = EntryToken <br>Promote integer operand: 0xe00722c: ch = store 0xcc056f0, 0xe00700c, 0xe007094, 0xe0071a4 <0xcc02bbc:0> alignment=16<br>
[--Crash occurs here--]<br><br>The crash occurs because the second operand to store is still an i1; it doesn't appear to have been updated to the i8 that was previously legalized. Stores for CellSPU are custom lowered. Is it my responsibility to promote the second operand or should I expect that the store's operands be updated after they have been type-legalized?<br>
<br><br>-scooter<br>