Hi,<div><br></div><div>I haven't been able to reproduce this problem on a smaller test and the original source code is from another virtual machine's IR. What I found out was that 42 << 7 is actually DPSoRegImmFrm, defined in ARMInstrFormats.td. This format is not dealt with in the ARMCodeEmitter.cpp and that's the problem I'm facing.</div>

<div><br></div><div>The triple I'm using is "armv7-unknown-linux-gnueabi" and the bitcode I'm dealing with is:</div><div><br></div><div><div><font color="#006600"> ; ModuleID = 'CRYO jit'</font></div>

<div><font color="#006600"> target triple = "armv7a-unknown-linux-gnueabi"</font></div><div><font color="#006600"> define i32 @execute(i8* %JNIEnv, i8* %v8) {</font></div><div><font color="#006600"> entry:</font></div>

<div><font color="#006600">   %litTemp = alloca i32</font></div><div><font color="#006600">   %v0_INTEGER = alloca i32</font></div><div><font color="#006600">   %v4_INTEGER = alloca i32</font></div><div><font color="#006600">   %v5_INTEGER = alloca i32</font></div>

<div><font color="#006600">   %v2_INTEGER = alloca i32</font></div><div><font color="#006600">   %v6_INTEGER = alloca i32</font></div><div><font color="#006600">   %v5_POINTER = alloca i8*</font></div><div><font color="#006600">   %v1_INTEGER = alloca i32</font></div>

<div><font color="#006600">   %v3_INTEGER = alloca i32</font></div><div><font color="#006600">   %v7_INTEGER = alloca i32</font></div><div><font color="#006600">   store i32 1, i32* %v7_INTEGER</font></div><div><font color="#006600">   store i32 1, i32* %v3_INTEGER</font></div>

<div><font color="#006600">   store i32 0, i32* %v1_INTEGER</font></div><div><font color="#006600">   %0 = getelementptr i8* %v8, i32 8</font></div><div><font color="#006600">   %1 = bitcast i8* %0 to i8**</font></div><div>

<font color="#006600">   %2 = load i8** %1</font></div><div><font color="#006600">   store i8* %2, i8** %v5_POINTER</font></div><div><font color="#006600">   store i32 0, i32* %v6_INTEGER</font></div><div><font color="#006600">   %3 = load i8** %v5_POINTER</font></div>

<div><font color="#006600">   %4 = getelementptr i8* %3, i32 12</font></div><div><font color="#006600">   %5 = bitcast i8* %4 to i32*</font></div><div><font color="#006600">   %6 = load i32* %v6_INTEGER</font></div><div>
<font color="#006600">   %7 = getelementptr i32* %5, i32 %6</font></div>
<div><font color="#006600">   %8 = load i32* %v7_INTEGER</font></div><div><font color="#006600">   store i32 %8, i32* %7</font></div><div><font color="#006600">   %9 = getelementptr i8* %v8, i32 8</font></div><div><font color="#006600">   %10 = bitcast i8* %9 to i8**</font></div>

<div><font color="#006600">   %11 = load i8** %10</font></div><div><font color="#006600">   store i8* %11, i8** %v5_POINTER</font></div><div><font color="#006600">   store i32 2, i32* %v6_INTEGER</font></div><div><font color="#006600">   %12 = load i8** %v5_POINTER</font></div>

<div><font color="#006600">   %13 = getelementptr i8* %12, i32 12</font></div><div><font color="#006600">   %14 = bitcast i8* %13 to i32*</font></div><div><font color="#006600">   %15 = load i32* %v7_INTEGER</font></div>
<div>
<font color="#006600">   %16 = getelementptr i32* %14, i32 %15</font></div><div><font color="#006600">   %17 = load i32* %v6_INTEGER</font></div><div><font color="#006600">   store i32 %17, i32* %16</font></div><div><font color="#006600">   store i32 2, i32* %v3_INTEGER</font></div>

<div><font color="#006600">   store i32 3, i32* %v2_INTEGER</font></div><div><font color="#006600">   br label %label000f</font></div><div><font color="#006600"> label000f:                                        ; preds = %merge0024, %entry</font></div>

<div><font color="#006600">   %18 = getelementptr i8* %v8, i32 12</font></div><div><font color="#006600">   %19 = bitcast i8* %18 to i32*</font></div><div><font color="#006600">   %20 = load i32* %19</font></div><div><font color="#006600">   store i32 %20, i32* %v5_INTEGER</font></div>

<div><font color="#006600">   %21 = load i32* %v2_INTEGER</font></div><div><font color="#006600">   %22 = load i32* %v5_INTEGER</font></div><div><font color="#006600">   %23 = icmp slt i32 %21, %22</font></div><div><font color="#006600">   br i1 %23, label %merge0014, label %else</font></div>

<div><font color="#006600"> else:                                             ; preds = %label000f</font></div><div><font color="#006600">   %24 = load i32* %v3_INTEGER</font></div><div><font color="#006600">   ret i32 %24</font></div>

<div><font color="#006600"> merge0014:                                        ; preds = %label000f</font></div><div><font color="#006600">   store i32 1, i32* %v4_INTEGER</font></div><div><font color="#006600">   store i32 1, i32* %v0_INTEGER</font></div>

<div><font color="#006600">   br label %label0016</font></div><div><font color="#006600"> label0016:                                        ; preds = %merge003e, %merge0014</font></div><div><font color="#006600">   %25 = load i32* %v4_INTEGER</font></div>

<div><font color="#006600">   %26 = load i32* %v3_INTEGER</font></div><div><font color="#006600">   %27 = icmp sge i32 %25, %26</font></div><div><font color="#006600">   br i1 %27, label %merge001a, label %else1</font></div>

<div><font color="#006600"> else1:                                            ; preds = %label0016</font></div><div><font color="#006600">   %28 = load i32* %v0_INTEGER</font></div><div><font color="#006600">   %29 = icmp ne i32 %28, 0</font></div>

<div><font color="#006600">   br i1 %29, label %merge0027, label %else2</font></div><div><font color="#006600"> else2:                                            ; preds = %else1</font></div><div><font color="#006600">   br label %merge001a</font></div>

<div><font color="#006600"> merge001a:                                        ; preds = %else2, %label0016</font></div><div><font color="#006600">   %30 = load i32* %v0_INTEGER</font></div><div><font color="#006600">   %31 = icmp eq i32 %30, 0</font></div>

<div><font color="#006600">   br i1 %31, label %merge0024, label %else3</font></div><div><font color="#006600"> else3:                                            ; preds = %merge001a</font></div><div><font color="#006600">   %32 = load i32* %v3_INTEGER</font></div>

<div><font color="#006600">   store i32 1, i32* %litTemp</font></div><div><font color="#006600">   %33 = load i32* %litTemp</font></div><div><font color="#006600">   %34 = add i32 %32, %33</font></div><div><font color="#006600">   store i32 %34, i32* %v3_INTEGER</font></div>

<div><font color="#006600">   %35 = getelementptr i8* %v8, i32 8</font></div><div><font color="#006600">   %36 = bitcast i8* %35 to i8**</font></div><div><font color="#006600">   %37 = load i8** %36</font></div><div><font color="#006600">   store i8* %37, i8** %v5_POINTER</font></div>

<div><font color="#006600">   %38 = load i32* %v3_INTEGER</font></div><div><font color="#006600">   %39 = load i32* %v7_INTEGER</font></div><div><font color="#006600">   %40 = sub i32 %38, %39</font></div><div><font color="#006600">   store i32 %40, i32* %v6_INTEGER</font></div>

<div><font color="#006600">   %41 = load i8** %v5_POINTER</font></div><div><font color="#006600">   %42 = getelementptr i8* %41, i32 12</font></div><div><font color="#006600">   %43 = bitcast i8* %42 to i32*</font></div>
<div>
<font color="#006600">   %44 = load i32* %v6_INTEGER</font></div><div><font color="#006600">   %45 = getelementptr i32* %43, i32 %44</font></div><div><font color="#006600">   %46 = load i32* %v2_INTEGER</font></div><div>
<font color="#006600">   store i32 %46, i32* %45</font></div>
<div><font color="#006600">   br label %merge0024</font></div><div><font color="#006600"> merge0024:                                        ; preds = %else3, %merge001a</font></div><div><font color="#006600">   %47 = load i32* %v2_INTEGER</font></div>

<div><font color="#006600">   store i32 1, i32* %litTemp</font></div><div><font color="#006600">   %48 = load i32* %litTemp</font></div><div><font color="#006600">   %49 = add i32 %47, %48</font></div><div><font color="#006600">   store i32 %49, i32* %v2_INTEGER</font></div>

<div><font color="#006600">   br label %label000f</font></div><div><font color="#006600"> merge0027:                                        ; preds = %else1</font></div><div><font color="#006600">   %50 = getelementptr i8* %v8, i32 8</font></div>

<div><font color="#006600">   %51 = bitcast i8* %50 to i8**</font></div><div><font color="#006600">   %52 = load i8** %51</font></div><div><font color="#006600">   store i8* %52, i8** %v5_POINTER</font></div><div><font color="#006600">   %53 = load i8** %v5_POINTER</font></div>

<div><font color="#006600">   %54 = getelementptr i8* %53, i32 12</font></div><div><font color="#006600">   %55 = bitcast i8* %54 to i32*</font></div><div><font color="#006600">   %56 = load i32* %v4_INTEGER</font></div>
<div>
<font color="#006600">   %57 = getelementptr i32* %55, i32 %56</font></div><div><font color="#006600">   %58 = load i32* %57</font></div><div><font color="#006600">   store i32 %58, i32* %v5_INTEGER</font></div><div><font color="#006600">   %59 = load i32* %v5_INTEGER</font></div>

<div><font color="#006600">   %60 = icmp sle i32 %59, 0</font></div><div><font color="#006600">   br i1 %60, label %merge003e, label %else4</font></div><div><font color="#006600"> else4:                                            ; preds = %merge0027</font></div>

<div><font color="#006600">   %61 = getelementptr i8* %v8, i32 8</font></div><div><font color="#006600">   %62 = bitcast i8* %61 to i8**</font></div><div><font color="#006600">   %63 = load i8** %62</font></div><div><font color="#006600">   store i8* %63, i8** %v5_POINTER</font></div>

<div><font color="#006600">   %64 = load i8** %v5_POINTER</font></div><div><font color="#006600">   %65 = getelementptr i8* %64, i32 12</font></div><div><font color="#006600">   %66 = bitcast i8* %65 to i32*</font></div>
<div>
<font color="#006600">   %67 = load i32* %v4_INTEGER</font></div><div><font color="#006600">   %68 = getelementptr i32* %66, i32 %67</font></div><div><font color="#006600">   %69 = load i32* %68</font></div><div><font color="#006600">   store i32 %69, i32* %v5_INTEGER</font></div>

<div><font color="#006600">   %70 = load i32* %v2_INTEGER</font></div><div><font color="#006600">   store i32 2, i32* %litTemp</font></div><div><font color="#006600">   %71 = load i32* %litTemp</font></div><div><font color="#006600">   %72 = udiv i32 %70, %71</font></div>

<div><font color="#006600">   store i32 %72, i32* %v6_INTEGER</font></div><div><font color="#006600">   %73 = load i32* %v5_INTEGER</font></div><div><font color="#006600">   %74 = load i32* %v6_INTEGER</font></div><div><font color="#006600">   %75 = icmp sgt i32 %73, %74</font></div>

<div><font color="#006600">   br i1 %75, label %merge003e, label %else5</font></div><div><font color="#006600"> else5:                                            ; preds = %else4</font></div><div><font color="#006600">   %76 = getelementptr i8* %v8, i32 8</font></div>

<div><font color="#006600">   %77 = bitcast i8* %76 to i8**</font></div><div><font color="#006600">   %78 = load i8** %77</font></div><div><font color="#006600">   store i8* %78, i8** %v5_POINTER</font></div><div><font color="#006600">   %79 = load i8** %v5_POINTER</font></div>

<div><font color="#006600">   %80 = getelementptr i8* %79, i32 12</font></div><div><font color="#006600">   %81 = bitcast i8* %80 to i32*</font></div><div><font color="#006600">   %82 = load i32* %v4_INTEGER</font></div>
<div>
<font color="#006600">   %83 = getelementptr i32* %81, i32 %82</font></div><div><font color="#006600">   %84 = load i32* %83</font></div><div><font color="#006600">   store i32 %84, i32* %v5_INTEGER</font></div><div><font color="#006600">   %85 = load i32* %v2_INTEGER</font></div>

<div><font color="#006600">   %86 = load i32* %v5_INTEGER</font></div><div><font color="#006600">   %87 = urem i32 %85, %86</font></div><div><font color="#006600">   store i32 %87, i32* %v5_INTEGER</font></div><div><font color="#006600">   %88 = load i32* %v5_INTEGER</font></div>

<div><font color="#006600">   %89 = icmp ne i32 %88, 0</font></div><div><font color="#006600">   br i1 %89, label %merge003e, label %else6</font></div><div><font color="#006600"> else6:                                            ; preds = %else5</font></div>

<div><font color="#006600">   store i32 0, i32* %v0_INTEGER</font></div><div><font color="#006600">   br label %merge003e</font></div><div><font color="#006600"> merge003e:                                        ; preds = %else6, %else5, %else4, %merge0027</font></div>

<div><font color="#006600">   %90 = load i32* %v4_INTEGER</font></div><div><font color="#006600">   store i32 1, i32* %litTemp</font></div><div><font color="#006600">   %91 = load i32* %litTemp</font></div><div><font color="#006600">   %92 = add i32 %90, %91</font></div>

<div><font color="#006600">   store i32 %92, i32* %v4_INTEGER</font></div><div><font color="#006600">   br label %label0016</font></div><div><font color="#006600"> }</font></div></div><div><br></div><div>Thanks for your help,</div>

<div><br><div class="gmail_quote">On Mon, Feb 20, 2012 at 7:10 PM, James Molloy <span dir="ltr"><<a href="mailto:james.molloy@arm.com">james.molloy@arm.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">










<div lang="EN-GB" link="blue" vlink="purple">

<div>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Hi Guillermo,<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">It’s difficult to do anything without a testcase – do you have a
(reduced) testcase available?<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">Cheers,<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">James<u></u><u></u></span></p>

<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u> <u></u></span></p>

<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0cm 0cm 0cm">

<p class="MsoNormal"><b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span lang="EN-US" style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> <a href="mailto:llvmdev-bounces@cs.uiuc.edu" target="_blank">llvmdev-bounces@cs.uiuc.edu</a>
[mailto:<a href="mailto:llvmdev-bounces@cs.uiuc.edu" target="_blank">llvmdev-bounces@cs.uiuc.edu</a>] <b>On Behalf Of </b>Guillermo Perez<br>
<b>Sent:</b> 20 February 2012 07:48<br>
<b>To:</b> <a href="mailto:llvmdev@cs.uiuc.edu" target="_blank">llvmdev@cs.uiuc.edu</a><br>
<b>Subject:</b> [LLVMdev] ARM opcode format<u></u><u></u></span></p>

</div><div><div class="h5">

<p class="MsoNormal"><u></u> <u></u></p>

<p class="MsoNormal">I'm doing some tests running llvm on Android. I'm getting an
error message saying:<u></u><u></u></p>

<div>

<p class="MsoNormal"><u></u> <u></u></p>

</div>

<div>

<p class="MsoNormal">Unhandled instruction encoding format!<u></u><u></u></p>

</div>

<div>

<p class="MsoNormal"><u></u> <u></u></p>

</div>

<div>

<p class="MsoNormal">I checked which instruction was causing this and it is
ADDrsi, it appears to have format 42 << 7, which is definitely not
available in ARMBaseInfo.h<u></u><u></u></p>

</div>

<div>

<p class="MsoNormal"><u></u> <u></u></p>

</div>

<div>

<p class="MsoNormal">Any suggestions are welcome<br clear="all">
<u></u><u></u></p>

<div>

<p class="MsoNormal"><u></u> <u></u></p>

</div>

<p class="MsoNormal">-- <br>
Guillermo A. Pérez (<span style="font-family:"MS Mincho"">吉耶莫</span>)<u></u><u></u></p>

</div>

</div></div></div>

</div>

</blockquote></div><br><br clear="all"><div><br></div>-- <br>Guillermo A. Pérez (吉耶莫)<br>
</div>