; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -passes=instcombine -S | FileCheck %s @c = external constant i8 @c2 = external constant i8 define i64 @testfunc() { ; CHECK-LABEL: @testfunc( ; CHECK-NEXT: [[SHL1:%.*]] = shl nuw i64 1, ptrtoint (ptr @c2 to i64) ; CHECK-NEXT: [[SHL2:%.*]] = shl i64 [[SHL1]], ptrtoint (ptr @c to i64) ; CHECK-NEXT: ret i64 [[SHL2]] ; %shl1 = shl i64 1, ptrtoint (ptr @c2 to i64) %shl2 = shl i64 %shl1, ptrtoint (ptr @c to i64) ret i64 %shl2 } define @scalable() { ; CHECK-LABEL: @scalable( ; CHECK-NEXT: [[SHL1:%.*]] = shl nuw splat (i64 1), shufflevector ( insertelement ( poison, i64 ptrtoint (ptr @c2 to i64), i64 0), poison, zeroinitializer) ; CHECK-NEXT: [[SHL2:%.*]] = shl [[SHL1]], shufflevector ( insertelement ( poison, i64 ptrtoint (ptr @c to i64), i64 0), poison, zeroinitializer) ; CHECK-NEXT: ret [[SHL2]] ; %shl1 = shl splat (i64 1), splat (i64 ptrtoint (ptr @c2 to i64)) %shl2 = shl %shl1, splat (i64 ptrtoint (ptr @c to i64)) ret %shl2 }