<div dir="ltr"><div>Hi all,<br><br>I have a question about why a couple of functions have their IR produced in a certain way (by clang++ on Linux x86_64). I write:<br><br>class ptr {<br>  int *p;<br>};<br><br>void y(char, ptr a, ptr b, ptr c, ptr d, ptr e, ptr f, ptr g) {}<br><br>void z(char, int *a, int *b, int *c, int *d, int *e, int *f, int *g) {}<br><br></div><div>And run clang++ -std=c++11 ptr.cpp -S -emit-llvm <br><br></div><div>And get the following relevant pieces of IR:<br><br>%class.ptr = type { i32* }<br><br>define void @_Z1yc3ptrS_S_S_S_S_S_(i8 signext, i32* %a.coerce, i32* %b.coerce, i32* %c.coerce, i32* %d.coerce, i32* %e.coerce, i64 %f.coerce, i64 %g.coerce) {<br>  // ...<br>}<br><br>define void @_Z1zcPiS_S_S_S_S_S_(i8 signext, i32* %a, i32* %b, i32* %c, i32* %d, i32* %e, i32* %f, i32* %g) {<br>  // ...<br>}<br><br></div><div style="text-align:left">Why do the first few ptr arguments to y show up in the IR as i32*, but later arguments show up as i64? But in z, all of the pointer arguments show up with type i32*?<br><br></div><div style="text-align:left">Thanks,<br></div><div style="text-align:left">Matt<br></div><div><br></div></div>