1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=i686-- -mcpu=i386 | FileCheck %s 3 4 %struct.CONSTRAINT = type { i32, i32, i32, i32 } 5 %struct.FIRST_UNION = type { %struct.anon } 6 %struct.FOURTH_UNION = type { %struct.CONSTRAINT } 7 %struct.LIST = type { ptr, ptr } 8 %struct.SECOND_UNION = type { { i16, i8, i8 } } 9 %struct.THIRD_UNION = type { { [2 x i32], [2 x i32] } } 10 %struct.anon = type { i8, i8, i32 } 11 %struct.head_type = type { [2 x %struct.LIST], %struct.FIRST_UNION, %struct.SECOND_UNION, %struct.THIRD_UNION, %struct.FOURTH_UNION, ptr, { ptr }, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32 } 12 %struct.rec = type { %struct.head_type } 13 %struct.symbol_type = type <{ [2 x %struct.LIST], %struct.FIRST_UNION, %struct.SECOND_UNION, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i16, i16, i8, i8, i8, i8 }> 14 %struct.word_type = type { [2 x %struct.LIST], %struct.FIRST_UNION, %struct.SECOND_UNION, %struct.THIRD_UNION, [4 x i8] } 15 16define void @InsertSym_bb1163(ptr %s) { 17; CHECK-LABEL: InsertSym_bb1163: 18; CHECK: # %bb.0: # %newFuncRoot 19; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax 20; CHECK-NEXT: movl (%eax), %ecx 21; CHECK-NEXT: movl 28(%ecx), %ecx 22; CHECK-NEXT: orb $-128, 26(%ecx) 23; CHECK-NEXT: orb $2, 25(%ecx) 24; CHECK-NEXT: movl (%eax), %eax 25; CHECK-NEXT: orb $1, 25(%eax) 26; CHECK-NEXT: retl 27newFuncRoot: 28 br label %bb1163 29bb1233.exitStub: ; preds = %bb1163 30 ret void 31bb1163: ; preds = %newFuncRoot 32 %tmp1164 = load ptr, ptr %s, align 4 ; <ptr> [#uses=1] 33 %tmp1165 = getelementptr %struct.rec, ptr %tmp1164, i32 0, i32 0 ; <ptr> [#uses=1] 34 %tmp1167 = getelementptr %struct.symbol_type, ptr %tmp1165, i32 0, i32 3 ; <ptr> [#uses=1] 35 %tmp1168 = load ptr, ptr %tmp1167, align 1 ; <ptr> [#uses=2] 36 %tmp1169 = load ptr, ptr %s, align 4 ; <ptr> [#uses=1] 37 %tmp1170 = getelementptr %struct.rec, ptr %tmp1169, i32 0, i32 0 ; <ptr> [#uses=1] 38 %tmp1172 = getelementptr %struct.symbol_type, ptr %tmp1170, i32 0, i32 3 ; <ptr> [#uses=1] 39 %tmp1173 = load ptr, ptr %tmp1172, align 1 ; <ptr> [#uses=2] 40 %tmp1174 = getelementptr %struct.rec, ptr %tmp1173, i32 0, i32 0 ; <ptr> [#uses=1] 41 %tmp1176 = getelementptr %struct.word_type, ptr %tmp1174, i32 0, i32 2 ; <ptr> [#uses=1] 42 %tmp1177 = getelementptr %struct.SECOND_UNION, ptr %tmp1176, i32 0, i32 0 ; <ptr> [#uses=1] 43 %tmp1179 = getelementptr <{ i8, i8, i8, i8 }>, ptr %tmp1177, i32 0, i32 2 ; <ptr> [#uses=2] 44 %mask1180 = and i8 1, 1 ; <i8> [#uses=2] 45 %tmp1181 = load i8, ptr %tmp1179, align 1 ; <i8> [#uses=1] 46 %tmp1182 = shl i8 %mask1180, 7 ; <i8> [#uses=1] 47 %tmp1183 = and i8 %tmp1181, 127 ; <i8> [#uses=1] 48 %tmp1184 = or i8 %tmp1183, %tmp1182 ; <i8> [#uses=1] 49 store i8 %tmp1184, ptr %tmp1179, align 1 50 %mask1185 = and i8 %mask1180, 1 ; <i8> [#uses=0] 51 %tmp1186 = getelementptr %struct.rec, ptr %tmp1173, i32 0, i32 0 ; <ptr> [#uses=1] 52 %tmp1188 = getelementptr %struct.word_type, ptr %tmp1186, i32 0, i32 2 ; <ptr> [#uses=1] 53 %tmp1189 = getelementptr %struct.SECOND_UNION, ptr %tmp1188, i32 0, i32 0 ; <ptr> [#uses=1] 54 %tmp1191 = getelementptr <{ i8, i8, i8, i8 }>, ptr %tmp1189, i32 0, i32 2 ; <ptr> [#uses=1] 55 %tmp1192 = load i8, ptr %tmp1191, align 1 ; <i8> [#uses=1] 56 %tmp1193 = lshr i8 %tmp1192, 7 ; <i8> [#uses=1] 57 %mask1194 = and i8 %tmp1193, 1 ; <i8> [#uses=2] 58 %mask1195 = and i8 %mask1194, 1 ; <i8> [#uses=0] 59 %tmp1196 = getelementptr %struct.rec, ptr %tmp1168, i32 0, i32 0 ; <ptr> [#uses=1] 60 %tmp1198 = getelementptr %struct.word_type, ptr %tmp1196, i32 0, i32 2 ; <ptr> [#uses=1] 61 %tmp1199 = getelementptr %struct.SECOND_UNION, ptr %tmp1198, i32 0, i32 0 ; <ptr> [#uses=1] 62 %tmp1201 = getelementptr <{ i8, i8, i8, i8 }>, ptr %tmp1199, i32 0, i32 1 ; <ptr> [#uses=2] 63 %mask1202 = and i8 %mask1194, 1 ; <i8> [#uses=2] 64 %tmp1203 = load i8, ptr %tmp1201, align 1 ; <i8> [#uses=1] 65 %tmp1204 = shl i8 %mask1202, 1 ; <i8> [#uses=1] 66 %tmp1205 = and i8 %tmp1204, 2 ; <i8> [#uses=1] 67 %tmp1206 = and i8 %tmp1203, -3 ; <i8> [#uses=1] 68 %tmp1207 = or i8 %tmp1206, %tmp1205 ; <i8> [#uses=1] 69 store i8 %tmp1207, ptr %tmp1201, align 1 70 %mask1208 = and i8 %mask1202, 1 ; <i8> [#uses=0] 71 %tmp1209 = getelementptr %struct.rec, ptr %tmp1168, i32 0, i32 0 ; <ptr> [#uses=1] 72 %tmp1211 = getelementptr %struct.word_type, ptr %tmp1209, i32 0, i32 2 ; <ptr> [#uses=1] 73 %tmp1212 = getelementptr %struct.SECOND_UNION, ptr %tmp1211, i32 0, i32 0 ; <ptr> [#uses=1] 74 %tmp1214 = getelementptr <{ i8, i8, i8, i8 }>, ptr %tmp1212, i32 0, i32 1 ; <ptr> [#uses=1] 75 %tmp1215 = load i8, ptr %tmp1214, align 1 ; <i8> [#uses=1] 76 %tmp1216 = shl i8 %tmp1215, 6 ; <i8> [#uses=1] 77 %tmp1217 = lshr i8 %tmp1216, 7 ; <i8> [#uses=1] 78 %mask1218 = and i8 %tmp1217, 1 ; <i8> [#uses=2] 79 %mask1219 = and i8 %mask1218, 1 ; <i8> [#uses=0] 80 %tmp1220 = load ptr, ptr %s, align 4 ; <ptr> [#uses=1] 81 %tmp1221 = getelementptr %struct.rec, ptr %tmp1220, i32 0, i32 0 ; <ptr> [#uses=1] 82 %tmp1223 = getelementptr %struct.word_type, ptr %tmp1221, i32 0, i32 2 ; <ptr> [#uses=1] 83 %tmp1224 = getelementptr %struct.SECOND_UNION, ptr %tmp1223, i32 0, i32 0 ; <ptr> [#uses=1] 84 %tmp1226 = getelementptr <{ i8, i8, i8, i8 }>, ptr %tmp1224, i32 0, i32 1 ; <ptr> [#uses=2] 85 %mask1227 = and i8 %mask1218, 1 ; <i8> [#uses=2] 86 %tmp1228 = load i8, ptr %tmp1226, align 1 ; <i8> [#uses=1] 87 %tmp1229 = and i8 %mask1227, 1 ; <i8> [#uses=1] 88 %tmp1230 = and i8 %tmp1228, -2 ; <i8> [#uses=1] 89 %tmp1231 = or i8 %tmp1230, %tmp1229 ; <i8> [#uses=1] 90 store i8 %tmp1231, ptr %tmp1226, align 1 91 %mask1232 = and i8 %mask1227, 1 ; <i8> [#uses=0] 92 br label %bb1233.exitStub 93} 94