<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;background-color:#FFFFFF;font-family:Calibri,Arial,Helvetica,sans-serif;">
<p>Hi,</p>
<p><br>
</p>
<p>I'm trying to implement the TTI hooks for AMDGPU to avoid unrolling loops for operations with huge expansions (i.e. integer division).</p>
<p><br>
</p>
<p>The values that are ultimately reported by opt -cost-model -analyze (the actual cost model tests) seem to not matter for this. <span style="font-size: 12pt;">The huge cost I've assigned division doesn't prevent the loop from being unrolled, because it isn't
 actually considered when loop unrolling.</span></p>
<div><br>
</div>
<p>The loop unrolled uses CodeMetrics, which via getUserCost ultimately uses TargetTransformInfoImplBase::getOperationCost(), which returns various fixed values (4 for division (TCC_Expensive, but this isn't nearly expensive enough)).<br>
</p>
<p><br>
</p>
<p><span style="font-size: 12pt;">getOperationCost only uses the type and opcode to estimate, so it doesn't require a value. No target overrides this. The hooks that targets do really implement, like </span><font size="3">getArithmeticInstrCost, use some information
 about the operands so require a value. These don't appear to be used at all by the cost model, and instead in specific </font>places in some passes.<span style="font-size: 12pt;"></span></p>
<p><br>
</p>
<p>Why don't any targets override getOperationCost or why aren't there any other hooks that change its behavior? Having these two parallel path for operation costs is confusing, especially since I expected to be able to use the -cost-model output for testing
 all of the computed costs.</p>
<p><span style="font-size: 12pt;"><br>
</span></p>
<p>-Matt</p>
</div>
</body>
</html>