; RUN: llhd-opt %s -p cf func @exts_i8 () void { entry: %a = const i8 60 ; 0b00111100 %ext1 = exts i4, i8 %a, 0, 4 %ext2 = exts i4, i8 %a, 2, 4 %ext3 = exts i4, i8 %a, 4, 4 ; CHECK: %ext1 = const i4 12 ; CHECK: %ext2 = const i4 15 ; CHECK: %ext3 = const i4 3 ret } func @extf_array () void { entry: %v0 = const i8 42 %v1 = const i8 43 %v2 = const i8 44 %v3 = const i8 45 %a = [4 x i8 %v0] %b = [i8 %v0, %v1, %v2, %v3] %zero = const i8 0 %uniform1 = extf i8, [4 x i8] %a, 0 %uniform2 = extf i8, [4 x i8] %a, 1 %uniform3 = extf i8, [4 x i8] %a, 2 %uniform4 = extf i8, [4 x i8] %a, 3 %uniform1_use = add i8 %uniform1, %zero %uniform2_use = add i8 %uniform2, %zero %uniform3_use = add i8 %uniform3, %zero %uniform4_use = add i8 %uniform4, %zero ; CHECK: %uniform1_use = const i8 42 ; CHECK: %uniform2_use = const i8 42 ; CHECK: %uniform3_use = const i8 42 ; CHECK: %uniform4_use = const i8 42 %var1 = extf i8, [4 x i8] %b, 0 %var2 = extf i8, [4 x i8] %b, 1 %var3 = extf i8, [4 x i8] %b, 2 %var4 = extf i8, [4 x i8] %b, 3 %var1_use = add i8 %var1, %zero %var2_use = add i8 %var2, %zero %var3_use = add i8 %var3, %zero %var4_use = add i8 %var4, %zero ; CHECK: %var1_use = const i8 42 ; CHECK: %var2_use = const i8 43 ; CHECK: %var3_use = const i8 44 ; CHECK: %var4_use = const i8 45 ret } func @extf_struct () void { entry: %v0 = const i8 42 %v1 = const i16 1337 %a = {i8 %v0, i16 %v1} %zero8 = const i8 0 %zero16 = const i16 0 %ext1 = extf i8, {i8, i16} %a, 0 %ext2 = extf i16, {i8, i16} %a, 1 %ext1_use = add i8 %ext1, %zero8 %ext2_use = add i16 %ext2, %zero16 ; CHECK: %ext1_use = const i8 42 ; CHECK: %ext2_use = const i16 1337 ret }