; RUN: opt < %s -instcombine -S > %t ; RUN: not grep zext %t ; RUN: not grep sext %t ; Instcombine should be able to eliminate all of these ext casts. declare void @use(i32) define i64 @foo(i64 %a) { %b = trunc i64 %a to i32 %c = and i32 %b, 15 %d = zext i32 %c to i64 call void @use(i32 %b) ret i64 %d } define i64 @bar(i64 %a) { %b = trunc i64 %a to i32 %c = shl i32 %b, 4 %q = ashr i32 %c, 4 %d = sext i32 %q to i64 call void @use(i32 %b) ret i64 %d } define i64 @goo(i64 %a) { %b = trunc i64 %a to i32 %c = and i32 %b, 8 %d = zext i32 %c to i64 call void @use(i32 %b) ret i64 %d } define i64 @hoo(i64 %a) { %b = trunc i64 %a to i32 %c = and i32 %b, 8 %x = xor i32 %c, 8 %d = zext i32 %x to i64 call void @use(i32 %b) ret i64 %d }