<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/91127>91127</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InstCombine] Miscompilation which converts `icmp eq (trunc nsw i64 X), (trunc nsw i32 Y)` into `icmp eq (zext i32 Y), X`
</td>
</tr>
<tr>
<th>Labels</th>
<td>
miscompilation,
llvm:instcombine
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
dtcxzyw
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dtcxzyw
</td>
</tr>
</table>
<pre>
Reduced test case: https://alive2.llvm.org/ce/z/MLgA5x
```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define i32 @src() {
entry:
br label %for.cond
for.cond: ; preds = %if.end, %entry
%storemerge = phi i32 [ 3, %entry ], [ %dec, %if.end ]
%h = phi i32 [ 1, %entry ], [ %hres, %if.end ]
%e = phi i32 [ 0, %entry ], [ -1, %if.end ]
%tobool.not = icmp eq i32 %storemerge, 0
br i1 %tobool.not, label %for.end9, label %for.body
for.body: ; preds = %for.cond
%cmp = icmp eq i32 %h, 5
%conv1 = zext i1 %cmp to i64
%conv2 = sext i32 %e to i64
%cond.i = call i64 @llvm.umax.i64(i64 %conv1, i64 %conv2)
%conv3 = trunc nsw i64 %cond.i to i16
%conv4 = trunc nsw i32 %e to i16
%sub.i = sub i16 %conv3, %conv4
%tobool6.not = icmp eq i16 %sub.i, 0
br i1 %tobool6.not, label %if.end, label %if.then
if.then: ; preds = %for.body
br label %if.end
if.end: ; preds = %if.then, %for.body
%hres = phi i32 [ 0, %if.then ], [ %h, %for.body ]
%dec = add nsw i32 %storemerge, -1
br label %for.cond
for.end9: ; preds = %for.cond
ret i32 %h
}
define i32 @tgt() {
entry:
br label %for.cond
for.cond: ; preds = %if.end, %entry
%storemerge = phi i32 [ 3, %entry ], [ %dec, %if.end ]
%h = phi i32 [ 1, %entry ], [ %hres, %if.end ]
%e = phi i32 [ 0, %entry ], [ -1, %if.end ]
%tobool.not = icmp eq i32 %storemerge, 0
br i1 %tobool.not, label %for.end9, label %for.body
for.body: ; preds = %for.cond
%cmp = icmp eq i32 %h, 5
%conv1 = zext i1 %cmp to i64
%conv2 = sext i32 %e to i64
%cond.i = call i64 @llvm.umax.i64(i64 %conv1, i64 %conv2)
%0 = zext i32 %e to i64
%tobool6.not = icmp eq i64 %cond.i, %0
br i1 %tobool6.not, label %if.end, label %if.then
if.then: ; preds = %for.body
br label %if.end
if.end: ; preds = %if.then, %for.body
%hres = phi i32 [ 0, %if.then ], [ %h, %for.body ]
%dec = add nsw i32 %storemerge, -1
br label %for.cond
for.end9: ; preds = %for.cond
ret i32 %h
}
```
llvm version: de9b386f84b58ad0ffc12e221bc6d9161ca5b62d
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsV8GO4jgTfhpzsYLiMnbIgQPdCOmX_rnsXmZOq8QuiHcTh42dbrqffmUnDQkMrR1pj42QictVX5XL9RVx4Zw5WsQNEU8EQHt1fn97JQBE7BZF76u224zCRdnqt81vqHuFmnp0nqrCIeFbWnl_coRvCewJ7IvavCAs6_qlWbbdkcBeIYH9O4H9t_8ft-JM0h1Jt0Sm4zdOfdEd0VNd-KIu3treU8J3lABg0hC-xeQEWUr4lkMcwpTNp-FJruKQmMsDgzXhWwbr5LBOxycbRfLDXK6S34MawCwU35lTjR9hnNfyD7lKevuXbV9tUhvbn5Oj7S9Ww6jxYCxSw4GSVeo6RQJwTkn2NCig9d1byFWcUVp2tC5KrCkBcWi7pWqtngJeZHxLCX-ipw61G4MS5rBEqwk8h8mAPMISEM63HTbYHYc9nCozhCWeKJ-aUCJ2cS6egkyjGlcH9Lh8Ra3uwNgnYFWH7jO0-9DSR2gJ-wzIt2Xb1kvbDnVjVHOi-PeAOk1FwEgnuTdsbh3WZ-eBVud3wkCF20OKMr6l__Zzd5jz04-7Crv4yXaqEJCY6rX2hUXNdzz7cVPBxrc0UGHQHBUhKrqoOODhXG9U1EsTNVVR12E1FHQkdd8U52VQh3UUj_5DUJM5EMhvQuQRz3e9VdS614l28BViYPLGZHVrMo14pu36cgzY9WVYu3gd6ybCXVMxnLm8L5nBMsJ9Vi3yrlyubJyKfIV2Wisfol8olZ_XyrUI511kDGPuEh93kBjNkKJb2JHBD0k6Wt-S_gbthqoaVQQstJ4e6ZyjCfuVBhlJ-l9yr0N_JdvgLNs97vP-6L_6_Fef_-rzINJJeA-9Puy90z-EsQy--u9X_5313_m9YRhDvdIX7Jxp48lqzEu-lof1qhTrQqeHg2KAAKxUUudMMlWIUoJe6A3XOc-LBW5YxlY5cM7lotrITJaYZ5hnxUFopuUhz7gQUpdKKs3ShdlACqtUpIIJLrhcZoWGNGO5WmHGsvJAVik2hakvF6GFca7HTc4YZIuYUjdeuxrjVNucTF34ED8AgWcCEAwJ3xrrvGqb0lgcL2bdJiwlZX90gavGeXf14o2v433uf9b559FO7Oi3mRP6WhlV0UBg7LyjRKYfJCSwnr-ifQ8MjyW1nr-I_QgLMqXG-vYG4dIAfozG34lMF31Xb-aXxaPxVV8uVdsQ2McNDz_JqWv_ROUJ7GPaHIF9zNw_AQAA__8-l_bx">