<div><div dir="auto">Adding llvm-dev back.</div></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 3 Sep 2019 at 18:02, Iulia Stirb <<a href="mailto:iulia_s24@yahoo.com">iulia_s24@yahoo.com</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_-6073088025054258871ydp9c041acyahoo-style-wrap" style="font-family:verdana,helvetica,sans-serif;font-size:10px"><div><div dir="ltr">Thank very much you for your answer. Following the indications in your mail, I obtained one of the 16th elements as below:</div><div dir="ltr"><br></div><div dir="ltr"><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:Droid Sans Mono,monospace,monospace,Droid Sans Fallback;font-weight:normal;font-size:14px;line-height:19px;white-space:pre-wrap"><div><span style="color:#d4d4d4">    </span><span style="color:#569cd6">static</span><span style="color:#d4d4d4"> </span><span style="color:#4ec9b0">cpu_set_t</span><span style="color:#d4d4d4"> </span><span style="color:#dcdcaa">getCpuAffinityElement</span><span style="color:#d4d4d4">(</span><span style="color:#4ec9b0">cpu_set_t</span><span style="color:#d4d4d4"> affinity, </span><span style="color:#569cd6">int</span><span style="color:#d4d4d4"> index) {</span></div><div><span style="color:#d4d4d4">      </span><span style="color:#4ec9b0">cpu_set_t</span><span style="color:#d4d4d4"> mask;</span></div><div><span style="color:#d4d4d4">      </span><span style="color:#dcdcaa">CPU_ZERO</span><span style="color:#d4d4d4">(</span><span style="color:#d4d4d4">&</span><span style="color:#d4d4d4">mask);</span></div><div><span style="color:#d4d4d4">      </span><span style="color:#c586c0">for</span><span style="color:#d4d4d4">(</span><span style="color:#569cd6">int</span><span style="color:#d4d4d4"> i </span><span style="color:#d4d4d4">=</span><span style="color:#d4d4d4"> index </span><span style="color:#d4d4d4">*</span><span style="color:#d4d4d4"> </span><span style="color:#569cd6">sizeof</span><span style="color:#d4d4d4">(</span><span style="color:#569cd6">unsigned</span><span style="color:#d4d4d4"> </span><span style="color:#569cd6">long</span><span style="color:#d4d4d4">); i </span><span style="color:#d4d4d4"><</span><span style="color:#d4d4d4"> (index </span><span style="color:#d4d4d4">+</span><span style="color:#d4d4d4"> </span><span style="color:#b5cea8">1</span><span style="color:#d4d4d4">) </span><span style="color:#d4d4d4">*</span><span style="color:#d4d4d4"> </span><span style="color:#569cd6">sizeof</span><span style="color:#d4d4d4">(</span><span style="color:#569cd6">unsigned</span><span style="color:#d4d4d4"> </span><span style="color:#569cd6">long</span><span style="color:#d4d4d4">); i</span><span style="color:#d4d4d4">++</span><span style="color:#d4d4d4">) {</span></div><div><span style="color:#d4d4d4">        </span><span style="color:#dcdcaa">CPU_SET</span><span style="color:#d4d4d4">(i,</span><span style="color:#d4d4d4">&</span><span style="color:#d4d4d4">mask);</span></div><div><span style="color:#d4d4d4">      }</span></div><div><span style="color:#d4d4d4">      </span><span style="color:#dcdcaa">CPU_AND</span><span style="color:#d4d4d4">(</span><span style="color:#d4d4d4">&</span><span style="color:#d4d4d4">affinity, </span><span style="color:#d4d4d4">&</span><span style="color:#d4d4d4">affinity, </span><span style="color:#d4d4d4">&</span><span style="color:#d4d4d4">mask);</span></div><div><span style="color:#d4d4d4">      </span><span style="color:#c586c0">return</span><span style="color:#d4d4d4"> affinity;</span></div><div><span style="color:#d4d4d4">    }</span></div></div></div></div></div></div></div></blockquote><div dir="auto"><br></div><div dir="auto">That looks like a weird function, but it’s just within the realms of plausible so I’ll assume you know what you’re doing. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_-6073088025054258871ydp9c041acyahoo-style-wrap" style="font-family:verdana,helvetica,sans-serif;font-size:10px"><div><div dir="ltr"><div><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:Droid Sans Mono,monospace,monospace,Droid Sans Fallback;font-weight:normal;font-size:14px;line-height:19px;white-space:pre-wrap"><div><span style="color:#d4d4d4"></span></div></div></div></div></div></div></div></blockquote><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_-6073088025054258871ydp9c041acyahoo-style-wrap" style="font-family:verdana,helvetica,sans-serif;font-size:10px"><div><div dir="ltr">The problem is that the element is of type cpu_set_t and cannot be converted to unsigned long. So, when I try to get the ConstantInt object like below, I get an error saying that I cannot pass a cpu_set_t parameter as second parameter of get method.</div><div style="font-family:verdana,helvetica,sans-serif;font-size:10px"><span><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:Droid Sans Mono,monospace,monospace,Droid Sans Fallback;font-weight:normal;font-size:14px;line-height:19px;white-space:pre-wrap"><div><span style="color:#d4d4d4">ConstantInt </span><span style="color:#d4d4d4">*</span><span style="color:#d4d4d4"> elem </span><span style="color:#d4d4d4">=</span><span style="color:#d4d4d4"> </span><span style="color:#dcdcaa">ConstantInt::get</span><span style="color:#d4d4d4">(</span><span style="color:#dcdcaa">Type::getInt64Ty</span><span style="color:#d4d4d4">(I.</span><span style="color:#dcdcaa">getContext</span><span style="color:#d4d4d4">()),affinityElement,</span><span style="color:#569cd6">false</span><span style="color:#d4d4d4">);</span></div></div></span></div></div></div></div></blockquote><div dir="auto"><br></div><div dir="auto">To use a real cpu_set_t from the host as part of a. ConstantInt like that you’ll have to look at its actual definition and access something like affinityElement.__bits[0]. The exact internals may vary with the header you’re using, but you’re fundamentally trying to do something ABI specific so you will have to get your hands dirty.</div><div dir="auto"> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_-6073088025054258871ydp9c041acyahoo-style-wrap" style="font-family:verdana,helvetica,sans-serif;font-size:10px"><div><div style="font-family:verdana,helvetica,sans-serif;font-size:10px"><span><div style="color:rgb(212,212,212);background-color:rgb(30,30,30);font-family:Droid Sans Mono,monospace,monospace,Droid Sans Fallback;font-weight:normal;font-size:14px;line-height:19px;white-space:pre-wrap"><div><span style="color:#d4d4d4"></span></div></div></span><div dir="ltr">What I need is to insert in IR a call that has a cpu_set_t parameter, and the parameter is already set (so I don't need to construct it).</div></div></div></div></div></blockquote><div dir="auto"><br></div><div dir="auto">An alternative might be to pass a pointer to the cpu_set_t you created above into the Module somehow (a global might work). It would sidestep the tricky annoying API for Constants in LLVM, and possibly even be a buffer against the structure changing in future. </div><div dir="auto"><br></div><div dir="auto">Cheers.</div><div dir="auto"><br></div><div dir="auto">Tim.</div></div></div>