Commits

Chris Lattner committed 6e9737ae512
Enhance IRGen of select_enum[_addr] to use the new emitValueCaseTest/emitIndirectCaseTest implementations when testing for one case. This leads to dramatically better IRGen for optional (among other things). For example, for: class C{} var x : C? if let a = x { } we used to produce: %15 = load i64* %14, align 8 switch i64 %15, label %16 [ i64 0, label %17 ] ; <label>:16 ; preds = %entry br label %select_enum ; <label>:17 ; preds = %entry br label %select_enum select_enum: ; preds = %17, %16 %18 = phi i1 [ true, %16 ], [ false, %17 ] br i1 %18, label %22, label %19 now we produce: %15 = load i64* %14, align 8 %16 = icmp eq i64 %15, 0 %17 = xor i1 %16, true br i1 %17, label %21, label %18 Hopefully this makes a measurable improvement in the -O0 performance tests, but I didn't check. This resolves: <rdar://problem/19404937> select_enum/select_enum_addr should generate select in obvious cases [-O0 performance] Swift SVN r24366