<div dir="ltr"><span style="font-size:12.8px">Hi,</span><div><span style="font-size:12.8px"><br></span><div style="font-size:12.8px">  One of my test cases is throwing a segv on x86_64 linux using llvm 3.7.</div><div style="font-size:12.8px">I cant see what is wrong unless its an alignment problem causing stack corruption. Its a simple naive absolute value calculation inside a loop which crashes after about 500000 iterations.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Here is the IR.</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">; Function Attrs: nounwind uwtable</div><div style="font-size:12.8px">define void @Main__TestProb() #0 {</div><div style="font-size:12.8px">entry:</div><div style="font-size:12.8px">  %i = alloca i64, align 8</div><div style="font-size:12.8px">  %j = alloca i64, align 8</div><div style="font-size:12.8px">  store i64 0, i64* %j, align 8</div><div style="font-size:12.8px">  store i64 1, i64* %i, align 8</div><div style="font-size:12.8px">  br label %label_1</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">label_1:                                          ; preds = %label_2, %entry</div><div style="font-size:12.8px">  %v.87 = load i64, i64* %i, align 8</div><div style="font-size:12.8px">  %abs_icmp = icmp slt i64 %v.87, 0</div><div style="font-size:12.8px">  %itetmp = alloca i64</div><div style="font-size:12.8px">  br i1 %abs_icmp, label %abs_then, label %abs_else</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">abs_then:                                         ; preds = %label_1</div><div style="font-size:12.8px">  %abs_ineg = sub nsw i64 0, %v.87</div><div style="font-size:12.8px">  store i64 %abs_ineg, i64* %itetmp</div><div style="font-size:12.8px">  br label %abs_end</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">abs_else:                                         ; preds = %label_1</div><div style="font-size:12.8px">  store i64 %v.87, i64* %itetmp</div><div style="font-size:12.8px">  br label %abs_end</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">abs_end:                                          ; preds = %abs_else, %abs_then</div><div style="font-size:12.8px">  %abs_load = load i64, i64* %itetmp</div><div style="font-size:12.8px">  store i64 %abs_load, i64* %j, align 8</div><div style="font-size:12.8px">  %v.871 = load i64, i64* %i, align 8</div><div style="font-size:12.8px">  %add = add nsw i64 1, %v.871</div><div style="font-size:12.8px">  store i64 %add, i64* %i, align 8</div><div style="font-size:12.8px">  br label %label_2</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">label_2:                                          ; preds = %abs_end</div><div style="font-size:12.8px">  %v.872 = load i64, i64* %i, align 8</div><div style="font-size:12.8px">  %icmp = icmp sge i64 600000, %v.872</div><div style="font-size:12.8px">  br i1 %icmp, label %label_1, label %else_1</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">else_1:                                           ; preds = %label_2</div><div style="font-size:12.8px">  br label %label_3</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">label_3:                                          ; preds = %else_1</div><div style="font-size:12.8px">  ret void</div><div style="font-size:12.8px">} </div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">compiles ok with stock llc</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Here's the generated assembly</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><div><span style="white-space:pre-wrap"> </span>.globl<span style="white-space:pre-wrap">  </span>Main__TestProb</div><div><span style="white-space:pre-wrap">   </span>.align<span style="white-space:pre-wrap">  </span>16, 0x90</div><div><span style="white-space:pre-wrap"> </span>.type<span style="white-space:pre-wrap">   </span>Main__TestProb,@function</div><div>Main__TestProb:                         # @Main__TestProb</div><div><span style="white-space:pre-wrap">     </span>.cfi_startproc</div><div># BB#0:                                 # %entry</div><div><span style="white-space:pre-wrap">    </span>pushq<span style="white-space:pre-wrap">   </span>%rbp</div><div>.Ltmp5:</div><div><span style="white-space:pre-wrap">       </span>.cfi_def_cfa_offset 16</div><div>.Ltmp6:</div><div><span style="white-space:pre-wrap">     </span>.cfi_offset %rbp, -16</div><div><span style="white-space:pre-wrap">    </span>movq<span style="white-space:pre-wrap">    </span>%rsp, %rbp</div><div>.Ltmp7:</div><div><span style="white-space:pre-wrap"> </span>.cfi_def_cfa_register %rbp</div><div><span style="white-space:pre-wrap">       </span>subq<span style="white-space:pre-wrap">    </span>$16, %rsp</div><div><span style="white-space:pre-wrap">        </span>movq<span style="white-space:pre-wrap">    </span>$0, -16(%rbp)</div><div><span style="white-space:pre-wrap">    </span>movq<span style="white-space:pre-wrap">    </span>$1, -8(%rbp)</div><div><span style="white-space:pre-wrap">     </span>.align<span style="white-space:pre-wrap">  </span>16, 0x90</div><div>.LBB8_1:                                # %label_1</div><div>                                        # =>This Inner Loop Header: Depth=1</div><div><span style="white-space:pre-wrap">       </span>movq<span style="white-space:pre-wrap">    </span>-8(%rbp), %rcx</div><div><span style="white-space:pre-wrap">   </span>movq<span style="white-space:pre-wrap">    </span>%rsp, %rax</div><div><span style="white-space:pre-wrap">       </span>addq<span style="white-space:pre-wrap">    </span>$-16, %rax</div><div><span style="white-space:pre-wrap">       </span>movq<span style="white-space:pre-wrap">    </span>%rax, %rsp</div><div><span style="white-space:pre-wrap">       </span>testq<span style="white-space:pre-wrap">   </span>%rcx, %rcx</div><div><span style="white-space:pre-wrap">       </span>jns<span style="white-space:pre-wrap">     </span>.LBB8_3</div><div># BB#2:                                 # %abs_then</div><div>                                        #   in Loop: Header=BB8_1 Depth=1</div><div><span style="white-space:pre-wrap">   </span>negq<span style="white-space:pre-wrap">    </span>%rcx</div><div>.LBB8_3:                                # %abs_else</div><div>                                        #   in Loop: Header=BB8_1 Depth=1</div><div><span style="white-space:pre-wrap">      </span>movq<span style="white-space:pre-wrap">    </span>%rcx, (%rax)</div><div><span style="white-space:pre-wrap">     </span>movq<span style="white-space:pre-wrap">    </span>(%rax), %rax</div><div><span style="white-space:pre-wrap">     </span>movq<span style="white-space:pre-wrap">    </span>%rax, -16(%rbp)</div><div><span style="white-space:pre-wrap">  </span>movq<span style="white-space:pre-wrap">    </span>-8(%rbp), %rax</div><div><span style="white-space:pre-wrap">   </span>incq<span style="white-space:pre-wrap">    </span>%rax</div><div><span style="white-space:pre-wrap">     </span>movq<span style="white-space:pre-wrap">    </span>%rax, -8(%rbp)</div><div><span style="white-space:pre-wrap">   </span>cmpq<span style="white-space:pre-wrap">    </span>$600001, %rax           # imm = 0x927C1</div><div><span style="white-space:pre-wrap">     </span>jl<span style="white-space:pre-wrap">      </span>.LBB8_1</div><div># BB#4:                                 # %label_3</div><div><span style="white-space:pre-wrap"> </span>movq<span style="white-space:pre-wrap">    </span>%rbp, %rsp</div><div><span style="white-space:pre-wrap">       </span>popq<span style="white-space:pre-wrap">    </span>%rbp</div><div><span style="white-space:pre-wrap">     </span>retq</div><div>.Lfunc_end8:</div><div><span style="white-space:pre-wrap">  </span>.size<span style="white-space:pre-wrap">   </span>Main__TestProb, .Lfunc_end8-Main__TestProb</div><div><span style="white-space:pre-wrap">       </span>.cfi_endproc</div></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">It crashes at movq %rcx,(%rax)</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Any clues as to what I am doing wrong?</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Regards Peter</div><div style="font-size:12.8px"><br></div></div></div>