<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">We have a test that looks like this…<br class=""><div><font color="#5856d6" class=""><span style="caret-color: rgb(88, 86, 214);" class=""><br class=""></span></font>define void @array16_store() {<br class="">; CHECK-LABEL: array16_store:<br class=""><font color="#5856d6" class=""><span style="caret-color: rgb(88, 86, 214);" class=""><br class=""></span></font>; CHECK: ldi [[REG1:r[0-9]+]], 204<br class="">; CHECK: ldi [[REG2:r[0-9]+]], 170<br class="">; CHECK: sts int.array+3, [[REG2]]<br class="">; CHECK: sts int.array+2, [[REG1]]<br class=""><font color="#5856d6" class=""><span style="caret-color: rgb(88, 86, 214);" class=""><br class=""></span></font>; CHECK: ldi [[REG1:r[0-9]+]], 187<br class="">; CHECK: ldi [[REG2:r[0-9]+]], 170<br class="">; CHECK: sts int.array+1, [[REG2]]<br class="">; CHECK: sts int.array, [[REG1]]<br class=""><font color="#5856d6" class=""><br class=""><span style="caret-color: rgb(88, 86, 214);" class=""><br class=""></span></font>; CHECK: ldi [[REG1:r[0-9]+]], 221<br class="">; CHECK: ldi [[REG2:r[0-9]+]], 170<br class="">; CHECK: sts int.array+5, [[REG2]]<br class="">; CHECK: sts int.array+4, [[REG1]]<br class=""> store i16 43707, i16* getelementptr inbounds ([3 x i16], [3 x i16]* @int.array, i32 0, i64 0)<br class=""> store i16 43724, i16* getelementptr inbounds ([3 x i16], [3 x i16]* @int.array, i32 0, i64 1)<br class=""> store i16 43741, i16* getelementptr inbounds ([3 x i16], [3 x i16]* @int.array, i32 0, i64 2)<br class=""> ret void<br class="">}<br class=""><font color="#5856d6" class=""><br class=""><br class=""><span style="caret-color: rgb(88, 86, 214);" class=""><br class=""></span></font>The issue I have is this test is unnecessarily fragile because the compiler can (and recently has) decided to reorder the blocks in a perfectly valid way.  For example:<br class=""><font color="#5856d6" class=""><span style="caret-color: rgb(88, 86, 214);" class=""><br class=""></span></font>; %bb.0:<br class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>ldi<span class="Apple-tab-span" style="white-space: pre;">       </span>r24, 221<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>ldi<span class="Apple-tab-span" style="white-space: pre;">       </span>r25, 170<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>sts<span class="Apple-tab-span" style="white-space: pre;">       </span>int.array+5, r25<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>sts<span class="Apple-tab-span" style="white-space: pre;">       </span>int.array+4, r24<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>ldi<span class="Apple-tab-span" style="white-space: pre;">       </span>r24, 204<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>ldi<span class="Apple-tab-span" style="white-space: pre;">       </span>r25, 170<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>sts<span class="Apple-tab-span" style="white-space: pre;">       </span>int.array+3, r25<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>sts<span class="Apple-tab-span" style="white-space: pre;">       </span>int.array+2, r24<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>ldi<span class="Apple-tab-span" style="white-space: pre;">       </span>r24, 187<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>ldi<span class="Apple-tab-span" style="white-space: pre;">       </span>r25, 170<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>sts<span class="Apple-tab-span" style="white-space: pre;">       </span>int.array+1, r25<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>sts<span class="Apple-tab-span" style="white-space: pre;">       </span>int.array, r24<br class=""><span class="Apple-tab-span" style="white-space: pre;">       </span>ret<br class=""><font color="#5856d6" class=""><br class=""><span style="caret-color: rgb(88, 86, 214);" class=""><br class=""></span></font>The three blocks should be independent, it doesn’t matter whether it does the store to array+5 and array+4 first or last. What matters is that each block stays together, these instructions must stay together for example:<br class=""><span class="Apple-tab-span" style="white-space: pre;">  </span>ldi<span class="Apple-tab-span" style="white-space: pre;">       </span>r24, 221<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>ldi<span class="Apple-tab-span" style="white-space: pre;">       </span>r25, 170<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>sts<span class="Apple-tab-span" style="white-space: pre;">       </span>int.array+5, r25<br class=""><span class="Apple-tab-span" style="white-space: pre;">     </span>sts<span class="Apple-tab-span" style="white-space: pre;">       </span>int.array+4, r24<br class=""><font color="#5856d6" class=""><span style="caret-color: rgb(88, 86, 214);" class=""><br class=""></span></font>But that could come after the other two blocks or before them.<br class=""><font color="#5856d6" class=""><br class=""><br class=""><span style="caret-color: rgb(88, 86, 214);" class=""><br class=""></span></font>How can I write FileCheck conditions to test this? If they were single re-orderable lines, I could use CHECK-DAG for each, but I need the four lines of each block to stay together.<br class=""><font color="#5856d6" class=""><span style="caret-color: rgb(88, 86, 214);" class=""><br class=""></span></font>Can anyone offer advice?<br class=""><font color="#5856d6" class=""><span style="caret-color: rgb(88, 86, 214);" class=""><br class=""></span></font><div class=""><div class="">Carl</div></div></div><br class=""></body></html>