1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s 3 4 %struct.BITMAP = type { i16, i16, i32, i32, i32, i32, i32, i32, i8*, i8* } 5 %struct.BltData = type { float, float, float, float } 6 %struct.BltDepth = type { i32, i8**, i32, %struct.BITMAP* (%struct.BltDepth**, %struct.BITMAP*, i32, i32, float*, float, i32)*, i32 (%struct.BltDepth**, %struct.BltOp*)*, i32 (%struct.BltDepth**, %struct.BltOp*, %struct.BltImg*)*, i32 (%struct.BltDepth**, %struct.BltOp*, %struct.BltSh*)*, [28 x [2 x [2 x i32]]]*, %struct.BltData* } 7 %struct.BltImg = type { i32, i8, i8, i8, float, float*, float*, i32, i32, float*, i32 (i8*, i8*, i8**, i32*, i8**, i32*)*, i8* } 8 %struct.BltOp = type { i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, i32, i32, i8*, i8*, i32, i32, i32, i32, i32, i32, i32, i8*, i8*, i32, i32, i32, i32, i32, i32, i32, i8* } 9 %struct.BltSh = type { i8, i8, i8, i8, float, float*, float*, float*, float*, i32, i32, float*, float*, float* } 10 11define void @t(%struct.BltDepth* %depth, %struct.BltOp* %bop, i32 %mode) nounwind { 12; CHECK-LABEL: t: 13; CHECK: ## %bb.0: ## %entry 14; CHECK-NEXT: cmpl $18, %edx 15; CHECK-NEXT: je LBB0_3 16; CHECK-NEXT: ## %bb.1: ## %entry 17; CHECK-NEXT: cmpl $1, %edx 18; CHECK-NEXT: jne LBB0_10 19; CHECK-NEXT: .p2align 4, 0x90 20; CHECK-NEXT: LBB0_2: ## %bb2898.us 21; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1 22; CHECK-NEXT: jmp LBB0_2 23; CHECK-NEXT: LBB0_3: ## %bb13086.preheader 24; CHECK-NEXT: movb $1, %al 25; CHECK-NEXT: .p2align 4, 0x90 26; CHECK-NEXT: LBB0_4: ## %bb13088 27; CHECK-NEXT: ## =>This Inner Loop Header: Depth=1 28; CHECK-NEXT: testb %al, %al 29; CHECK-NEXT: jne LBB0_5 30; CHECK-NEXT: ## %bb.6: ## %bb13101 31; CHECK-NEXT: ## in Loop: Header=BB0_4 Depth=1 32; CHECK-NEXT: xorl %ecx, %ecx 33; CHECK-NEXT: jmp LBB0_7 34; CHECK-NEXT: .p2align 4, 0x90 35; CHECK-NEXT: LBB0_5: ## in Loop: Header=BB0_4 Depth=1 36; CHECK-NEXT: movl $65535, %ecx ## imm = 0xFFFF 37; CHECK-NEXT: LBB0_7: ## %bb13107 38; CHECK-NEXT: ## in Loop: Header=BB0_4 Depth=1 39; CHECK-NEXT: movl %ecx, %edx 40; CHECK-NEXT: shll $16, %edx 41; CHECK-NEXT: subl %ecx, %edx 42; CHECK-NEXT: incl %edx 43; CHECK-NEXT: shrl $16, %edx 44; CHECK-NEXT: subl %edx, %ecx 45; CHECK-NEXT: testw %cx, %cx 46; CHECK-NEXT: je LBB0_4 47; CHECK-NEXT: ## %bb.8: ## %bb13236 48; CHECK-NEXT: ## in Loop: Header=BB0_4 Depth=1 49; CHECK-NEXT: cmpw $-1, %cx 50; CHECK-NEXT: testb %al, %al 51; CHECK-NEXT: jne LBB0_4 52; CHECK-NEXT: ## %bb.9: ## %bb13572 53; CHECK-NEXT: ## in Loop: Header=BB0_4 Depth=1 54; CHECK-NEXT: movzwl %cx, %ecx 55; CHECK-NEXT: movl %ecx, %edx 56; CHECK-NEXT: shll $16, %edx 57; CHECK-NEXT: subl %ecx, %edx 58; CHECK-NEXT: incl %edx 59; CHECK-NEXT: shrl $16, %edx 60; CHECK-NEXT: movw %dx, 0 61; CHECK-NEXT: jmp LBB0_4 62; CHECK-NEXT: LBB0_10: ## %return 63; CHECK-NEXT: retq 64entry: 65 switch i32 %mode, label %return [ 66 i32 1, label %bb2898.us 67 i32 18, label %bb13086.preheader 68 ] 69 70bb13086.preheader: ; preds = %entry 71 %tmp13098 = icmp eq i32 0, 0 ; <i1> [#uses=1] 72 %tmp13238 = icmp eq i32 0, 0 ; <i1> [#uses=1] 73 br label %bb13088 74 75bb2898.us: ; preds = %bb2898.us, %entry 76 br label %bb2898.us 77 78bb13088: ; preds = %bb13572, %bb13567, %bb13107, %bb13086.preheader 79 br i1 %tmp13098, label %bb13107, label %bb13101 80 81bb13101: ; preds = %bb13088 82 br label %bb13107 83 84bb13107: ; preds = %bb13101, %bb13088 85 %iftmp.684.0 = phi i32 [ 0, %bb13101 ], [ 65535, %bb13088 ] ; <i32> [#uses=2] 86 %tmp13111 = load i64, i64* null, align 8 ; <i64> [#uses=3] 87 %tmp13116 = lshr i64 %tmp13111, 16 ; <i64> [#uses=1] 88 %tmp1311613117 = trunc i64 %tmp13116 to i32 ; <i32> [#uses=1] 89 %tmp13118 = and i32 %tmp1311613117, 65535 ; <i32> [#uses=1] 90 %tmp13120 = lshr i64 %tmp13111, 32 ; <i64> [#uses=1] 91 %tmp1312013121 = trunc i64 %tmp13120 to i32 ; <i32> [#uses=1] 92 %tmp13122 = and i32 %tmp1312013121, 65535 ; <i32> [#uses=2] 93 %tmp13124 = lshr i64 %tmp13111, 48 ; <i64> [#uses=1] 94 %tmp1312413125 = trunc i64 %tmp13124 to i32 ; <i32> [#uses=2] 95 %tmp1314013141not = xor i16 0, -1 ; <i16> [#uses=1] 96 %tmp1314013141not13142 = zext i16 %tmp1314013141not to i32 ; <i32> [#uses=3] 97 %tmp13151 = mul i32 %tmp13122, %tmp1314013141not13142 ; <i32> [#uses=1] 98 %tmp13154 = mul i32 %tmp1312413125, %tmp1314013141not13142 ; <i32> [#uses=1] 99 %tmp13157 = mul i32 %iftmp.684.0, %tmp1314013141not13142 ; <i32> [#uses=1] 100 %tmp13171 = add i32 %tmp13151, 1 ; <i32> [#uses=1] 101 %tmp13172 = add i32 %tmp13171, 0 ; <i32> [#uses=1] 102 %tmp13176 = add i32 %tmp13154, 1 ; <i32> [#uses=1] 103 %tmp13177 = add i32 %tmp13176, 0 ; <i32> [#uses=1] 104 %tmp13181 = add i32 %tmp13157, 1 ; <i32> [#uses=1] 105 %tmp13182 = add i32 %tmp13181, 0 ; <i32> [#uses=1] 106 %tmp13188 = lshr i32 %tmp13172, 16 ; <i32> [#uses=1] 107 %tmp13190 = lshr i32 %tmp13177, 16 ; <i32> [#uses=1] 108 %tmp13192 = lshr i32 %tmp13182, 16 ; <i32> [#uses=1] 109 %tmp13198 = sub i32 %tmp13118, 0 ; <i32> [#uses=1] 110 %tmp13201 = sub i32 %tmp13122, %tmp13188 ; <i32> [#uses=1] 111 %tmp13204 = sub i32 %tmp1312413125, %tmp13190 ; <i32> [#uses=1] 112 %tmp13207 = sub i32 %iftmp.684.0, %tmp13192 ; <i32> [#uses=1] 113 %tmp1320813209 = zext i32 %tmp13204 to i64 ; <i64> [#uses=1] 114 %tmp13211 = shl i64 %tmp1320813209, 48 ; <i64> [#uses=1] 115 %tmp1321213213 = zext i32 %tmp13201 to i64 ; <i64> [#uses=1] 116 %tmp13214 = shl i64 %tmp1321213213, 32 ; <i64> [#uses=1] 117 %tmp13215 = and i64 %tmp13214, 281470681743360 ; <i64> [#uses=1] 118 %tmp1321713218 = zext i32 %tmp13198 to i64 ; <i64> [#uses=1] 119 %tmp13219 = shl i64 %tmp1321713218, 16 ; <i64> [#uses=1] 120 %tmp13220 = and i64 %tmp13219, 4294901760 ; <i64> [#uses=1] 121 %tmp13216 = or i64 %tmp13211, 0 ; <i64> [#uses=1] 122 %tmp13221 = or i64 %tmp13216, %tmp13215 ; <i64> [#uses=1] 123 %tmp13225 = or i64 %tmp13221, %tmp13220 ; <i64> [#uses=4] 124 %tmp1322713228 = trunc i32 %tmp13207 to i16 ; <i16> [#uses=4] 125 %tmp13233 = icmp eq i16 %tmp1322713228, 0 ; <i1> [#uses=1] 126 br i1 %tmp13233, label %bb13088, label %bb13236 127 128bb13236: ; preds = %bb13107 129 br i1 false, label %bb13567, label %bb13252 130 131bb13252: ; preds = %bb13236 132 %tmp1329013291 = zext i16 %tmp1322713228 to i64 ; <i64> [#uses=8] 133 %tmp13296 = lshr i64 %tmp13225, 16 ; <i64> [#uses=1] 134 %tmp13297 = and i64 %tmp13296, 65535 ; <i64> [#uses=1] 135 %tmp13299 = lshr i64 %tmp13225, 32 ; <i64> [#uses=1] 136 %tmp13300 = and i64 %tmp13299, 65535 ; <i64> [#uses=1] 137 %tmp13302 = lshr i64 %tmp13225, 48 ; <i64> [#uses=1] 138 %tmp13306 = sub i64 %tmp1329013291, 0 ; <i64> [#uses=0] 139 %tmp13309 = sub i64 %tmp1329013291, %tmp13297 ; <i64> [#uses=1] 140 %tmp13312 = sub i64 %tmp1329013291, %tmp13300 ; <i64> [#uses=1] 141 %tmp13315 = sub i64 %tmp1329013291, %tmp13302 ; <i64> [#uses=1] 142 %tmp13318 = mul i64 %tmp1329013291, %tmp1329013291 ; <i64> [#uses=1] 143 br i1 false, label %bb13339, label %bb13324 144 145bb13324: ; preds = %bb13252 146 br i1 false, label %bb13339, label %bb13330 147 148bb13330: ; preds = %bb13324 149 %tmp13337 = sdiv i64 0, 0 ; <i64> [#uses=1] 150 br label %bb13339 151 152bb13339: ; preds = %bb13330, %bb13324, %bb13252 153 %r0120.0 = phi i64 [ %tmp13337, %bb13330 ], [ 0, %bb13252 ], [ 4294836225, %bb13324 ] ; <i64> [#uses=1] 154 br i1 false, label %bb13360, label %bb13345 155 156bb13345: ; preds = %bb13339 157 br i1 false, label %bb13360, label %bb13351 158 159bb13351: ; preds = %bb13345 160 %tmp13354 = mul i64 0, %tmp13318 ; <i64> [#uses=1] 161 %tmp13357 = sub i64 %tmp1329013291, %tmp13309 ; <i64> [#uses=1] 162 %tmp13358 = sdiv i64 %tmp13354, %tmp13357 ; <i64> [#uses=1] 163 br label %bb13360 164 165bb13360: ; preds = %bb13351, %bb13345, %bb13339 166 %r1121.0 = phi i64 [ %tmp13358, %bb13351 ], [ 0, %bb13339 ], [ 4294836225, %bb13345 ] ; <i64> [#uses=1] 167 br i1 false, label %bb13402, label %bb13387 168 169bb13387: ; preds = %bb13360 170 br label %bb13402 171 172bb13402: ; preds = %bb13387, %bb13360 173 %r3123.0 = phi i64 [ 0, %bb13360 ], [ 4294836225, %bb13387 ] ; <i64> [#uses=1] 174 %tmp13404 = icmp eq i16 %tmp1322713228, -1 ; <i1> [#uses=1] 175 br i1 %tmp13404, label %bb13435, label %bb13407 176 177bb13407: ; preds = %bb13402 178 br label %bb13435 179 180bb13435: ; preds = %bb13407, %bb13402 181 %r0120.1 = phi i64 [ 0, %bb13407 ], [ %r0120.0, %bb13402 ] ; <i64> [#uses=0] 182 %r1121.1 = phi i64 [ 0, %bb13407 ], [ %r1121.0, %bb13402 ] ; <i64> [#uses=0] 183 %r3123.1 = phi i64 [ 0, %bb13407 ], [ %r3123.0, %bb13402 ] ; <i64> [#uses=0] 184 %tmp13450 = mul i64 0, %tmp13312 ; <i64> [#uses=0] 185 %tmp13455 = mul i64 0, %tmp13315 ; <i64> [#uses=0] 186 %tmp13461 = add i64 0, %tmp1329013291 ; <i64> [#uses=1] 187 %tmp13462 = mul i64 %tmp13461, 65535 ; <i64> [#uses=1] 188 %tmp13466 = sub i64 %tmp13462, 0 ; <i64> [#uses=1] 189 %tmp13526 = add i64 %tmp13466, 1 ; <i64> [#uses=1] 190 %tmp13527 = add i64 %tmp13526, 0 ; <i64> [#uses=1] 191 %tmp13528 = ashr i64 %tmp13527, 16 ; <i64> [#uses=4] 192 %tmp13536 = sub i64 %tmp13528, 0 ; <i64> [#uses=1] 193 %tmp13537 = shl i64 %tmp13536, 32 ; <i64> [#uses=1] 194 %tmp13538 = and i64 %tmp13537, 281470681743360 ; <i64> [#uses=1] 195 %tmp13542 = sub i64 %tmp13528, 0 ; <i64> [#uses=1] 196 %tmp13543 = shl i64 %tmp13542, 16 ; <i64> [#uses=1] 197 %tmp13544 = and i64 %tmp13543, 4294901760 ; <i64> [#uses=1] 198 %tmp13548 = sub i64 %tmp13528, 0 ; <i64> [#uses=1] 199 %tmp13549 = and i64 %tmp13548, 65535 ; <i64> [#uses=1] 200 %tmp13539 = or i64 %tmp13538, 0 ; <i64> [#uses=1] 201 %tmp13545 = or i64 %tmp13539, %tmp13549 ; <i64> [#uses=1] 202 %tmp13550 = or i64 %tmp13545, %tmp13544 ; <i64> [#uses=1] 203 %tmp1355213553 = trunc i64 %tmp13528 to i16 ; <i16> [#uses=1] 204 br label %bb13567 205 206bb13567: ; preds = %bb13435, %bb13236 207 %tsp1040.0.0 = phi i64 [ %tmp13550, %bb13435 ], [ %tmp13225, %bb13236 ] ; <i64> [#uses=0] 208 %tsp1040.1.0 = phi i16 [ %tmp1355213553, %bb13435 ], [ %tmp1322713228, %bb13236 ] ; <i16> [#uses=1] 209 br i1 %tmp13238, label %bb13088, label %bb13572 210 211bb13572: ; preds = %bb13567 212 store i16 %tsp1040.1.0, i16* null, align 2 213 br label %bb13088 214 215return: ; preds = %entry 216 ret void 217} 218