<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style id="owaParaStyle" type="text/css">P {margin-top:0;margin-bottom:0;}</style>
</head>
<body ocsi="0" fpstyle="1">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Hi,<br>
<br>
commit b955b0de : "Replace Count{Leading,Trailing}Zeros_{32,64} with count{Leading,Trailing}Zeros"<br>
Added bug to XCore backend.<br>
<br>
The type past to countLeadingZeros() now needs to be explicitly cast to 32bit<br>
<br>
Below is the patch:<br>
    llvm/lib/Target/XCore/XCoreISelDAGToDAG.cpp<br>
    llvm/lib/Target/XCore/XCoreInstrInfo.td<br>
and test:<br>
    llvm/test/CodeGen/XCore/zext.ll<br>
<br>
robert<br>
<br>
<br>
--- llvm/lib/Target/XCore/XCoreISelDAGToDAG.cpp<br>
+++ llvm/lib/Target/XCore/XCoreISelDAGToDAG.cpp<br>
@@ -115,7 +115,7 @@ SDNode *XCoreDAGToDAGISel::Select(SDNode *N) {<br>
     if (immMskBitp(N)) {<br>
       // Transformation function: get the size of a mask<br>
       // Look for the first non-zero bit<br>
-      SDValue MskSize = getI32Imm(32 - countLeadingZeros(Val));<br>
+      SDValue MskSize = getI32Imm(32 - countLeadingZeros((uint32_t)Val));<br>
       return CurDAG->getMachineNode(XCore::MKMSK_rus, dl,<br>
                                     MVT::i32, MskSize);<br>
     }<br>
<br>
<br>
--- llvm/lib/Target/XCore/XCoreInstrInfo.td<br>
+++ llvm/lib/Target/XCore/XCoreInstrInfo.td<br>
@@ -84,7 +84,7 @@ def msksize_xform : SDNodeXForm<imm, [{<br>
   // Transformation function: get the size of a mask<br>
   assert(isMask_32(N->getZExtValue()));<br>
   // look for the first non-zero bit<br>
-  return getI32Imm(32 - countLeadingZeros(N->getZExtValue()));<br>
+  return getI32Imm(32 - countLeadingZeros((uint32_t)N->getZExtValue()));<br>
 }]>;<br>
 <br>
 def neg_xform : SDNodeXForm<imm, [{<br>
<br>
<br>
--- /dev/null<br>
+++ llvm/test/CodeGen/XCore/zext.ll<br>
@@ -0,0 +1,17 @@<br>
+; RUN: llc -march=xcore < %s | FileCheck %s<br>
+;; countLeadingZeros() must be past 32bit types<br>
+<br>
+define i32 @f(i1 %a) {<br>
+entry:<br>
+; CHECK: zext r0, 1<br>
+; CHECK: retsp 0<br>
+  %b= zext i1 %a to i32<br>
+  ret i32 %b<br>
+}<br>
+<br>
+define i32 @g() {<br>
+entry:<br>
+; CHECK: mkmsk r0, 1<br>
+; CHECK: retsp 0<br>
+  ret i32 1;<br>
+}<br>
<br>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px"></div>
</div>
</body>
</html>