@@ -339,28 +339,16 @@ define i1 @nonnull2(ptr %a) {
339339; if the assume is control dependent on something else
340340
341341define i1 @nonnull3 (ptr %a , i1 %control ) {
342- ; FIXME: in the BUNDLES version we could duplicate the load and keep the assume nonnull.
343- ; DEFAULT-LABEL: @nonnull3(
344- ; DEFAULT-NEXT: entry:
345- ; DEFAULT-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
346- ; DEFAULT-NEXT: [[CMP:%.*]] = icmp ne ptr [[LOAD]], null
347- ; DEFAULT-NEXT: br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
348- ; DEFAULT: taken:
349- ; DEFAULT-NEXT: tail call void @llvm.assume(i1 [[CMP]])
350- ; DEFAULT-NEXT: ret i1 false
351- ; DEFAULT: not_taken:
352- ; DEFAULT-NEXT: [[RVAL_2:%.*]] = icmp sgt ptr [[LOAD]], null
353- ; DEFAULT-NEXT: ret i1 [[RVAL_2]]
354- ;
355- ; BUNDLES-LABEL: @nonnull3(
356- ; BUNDLES-NEXT: entry:
357- ; BUNDLES-NEXT: br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
358- ; BUNDLES: taken:
359- ; BUNDLES-NEXT: ret i1 false
360- ; BUNDLES: not_taken:
361- ; BUNDLES-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
362- ; BUNDLES-NEXT: [[RVAL_2:%.*]] = icmp sgt ptr [[LOAD]], null
363- ; BUNDLES-NEXT: ret i1 [[RVAL_2]]
342+ ; FIXME: we could duplicate the load and keep the assume nonnull.
343+ ; CHECK-LABEL: @nonnull3(
344+ ; CHECK-NEXT: entry:
345+ ; CHECK-NEXT: br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
346+ ; CHECK: taken:
347+ ; CHECK-NEXT: ret i1 false
348+ ; CHECK: not_taken:
349+ ; CHECK-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
350+ ; CHECK-NEXT: [[RVAL_2:%.*]] = icmp sgt ptr [[LOAD]], null
351+ ; CHECK-NEXT: ret i1 [[RVAL_2]]
364352;
365353entry:
366354 %load = load ptr , ptr %a
@@ -380,18 +368,11 @@ not_taken:
380368; interrupted by an exception being thrown
381369
382370define i1 @nonnull4 (ptr %a ) {
383- ; DEFAULT-LABEL: @nonnull4(
384- ; DEFAULT-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
385- ; DEFAULT-NEXT: tail call void @escape(ptr [[LOAD]])
386- ; DEFAULT-NEXT: [[CMP:%.*]] = icmp ne ptr [[LOAD]], null
387- ; DEFAULT-NEXT: tail call void @llvm.assume(i1 [[CMP]])
388- ; DEFAULT-NEXT: ret i1 false
389- ;
390- ; BUNDLES-LABEL: @nonnull4(
391- ; BUNDLES-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
392- ; BUNDLES-NEXT: tail call void @escape(ptr [[LOAD]])
393- ; BUNDLES-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[LOAD]]) ]
394- ; BUNDLES-NEXT: ret i1 false
371+ ; CHECK-LABEL: @nonnull4(
372+ ; CHECK-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
373+ ; CHECK-NEXT: tail call void @escape(ptr [[LOAD]])
374+ ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[LOAD]]) ]
375+ ; CHECK-NEXT: ret i1 false
395376;
396377 %load = load ptr , ptr %a
397378 ;; This call may throw!
@@ -515,27 +496,15 @@ define i32 @PR40940(<4 x i8> %x) {
515496}
516497
517498define i1 @nonnull3A (ptr %a , i1 %control ) {
518- ; DEFAULT-LABEL: @nonnull3A(
519- ; DEFAULT-NEXT: entry:
520- ; DEFAULT-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
521- ; DEFAULT-NEXT: br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
522- ; DEFAULT: taken:
523- ; DEFAULT-NEXT: [[CMP:%.*]] = icmp ne ptr [[LOAD]], null
524- ; DEFAULT-NEXT: call void @llvm.assume(i1 [[CMP]])
525- ; DEFAULT-NEXT: ret i1 [[CMP]]
526- ; DEFAULT: not_taken:
527- ; DEFAULT-NEXT: [[RVAL_2:%.*]] = icmp sgt ptr [[LOAD]], null
528- ; DEFAULT-NEXT: ret i1 [[RVAL_2]]
529- ;
530- ; BUNDLES-LABEL: @nonnull3A(
531- ; BUNDLES-NEXT: entry:
532- ; BUNDLES-NEXT: br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
533- ; BUNDLES: taken:
534- ; BUNDLES-NEXT: ret i1 true
535- ; BUNDLES: not_taken:
536- ; BUNDLES-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
537- ; BUNDLES-NEXT: [[RVAL_2:%.*]] = icmp sgt ptr [[LOAD]], null
538- ; BUNDLES-NEXT: ret i1 [[RVAL_2]]
499+ ; CHECK-LABEL: @nonnull3A(
500+ ; CHECK-NEXT: entry:
501+ ; CHECK-NEXT: br i1 [[CONTROL:%.*]], label [[TAKEN:%.*]], label [[NOT_TAKEN:%.*]]
502+ ; CHECK: taken:
503+ ; CHECK-NEXT: ret i1 true
504+ ; CHECK: not_taken:
505+ ; CHECK-NEXT: [[LOAD:%.*]] = load ptr, ptr [[A:%.*]], align 8
506+ ; CHECK-NEXT: [[RVAL_2:%.*]] = icmp sgt ptr [[LOAD]], null
507+ ; CHECK-NEXT: ret i1 [[RVAL_2]]
539508;
540509entry:
541510 %load = load ptr , ptr %a
@@ -635,16 +604,8 @@ not_taken:
635604}
636605
637606define void @nonnull_only_ephemeral_use (ptr %p ) {
638- ; DEFAULT-LABEL: @nonnull_only_ephemeral_use(
639- ; DEFAULT-NEXT: [[A:%.*]] = load ptr, ptr [[P:%.*]], align 8
640- ; DEFAULT-NEXT: [[CMP:%.*]] = icmp ne ptr [[A]], null
641- ; DEFAULT-NEXT: tail call void @llvm.assume(i1 [[CMP]])
642- ; DEFAULT-NEXT: ret void
643- ;
644- ; BUNDLES-LABEL: @nonnull_only_ephemeral_use(
645- ; BUNDLES-NEXT: [[A:%.*]] = load ptr, ptr [[P:%.*]], align 8
646- ; BUNDLES-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[A]]) ]
647- ; BUNDLES-NEXT: ret void
607+ ; CHECK-LABEL: @nonnull_only_ephemeral_use(
608+ ; CHECK-NEXT: ret void
648609;
649610 %a = load ptr , ptr %p
650611 %cmp = icmp ne ptr %a , null
0 commit comments