Possible instruction combine bug with pointer icmp?

If I give instcombine the following IR:

define i1 @f([1 x i8]* %a, [1 x i8]* %b) {
   %c = getelementptr [1 x i8]* %a, i32 0, i32 0
   %d = getelementptr [1 x i8]* %b, i32 0, i32 0
   %cmp = icmp ult i8* %c, %d
   ret i1 %cmp
}

It optimizes it into:

define i1 @f([1 x i8]* %a, [1 x i8]* %b) {
   %cmp = icmp slt [1 x i8]* %a, %b
   ret i1 %cmp
}

Is this a bug, or are there some semantics of icmp or getelementptr I'm missing that mean it's OK to change this from an unsigned comparison to a signed comparison?

Looks like a bug to me.

-Eli

Thanks for confirming this, I’ve filed it as PR16483: