@@ -2724,6 +2724,45 @@ define i1 @icmp_nsw_false_5(i8 %V) {
27242724 ret i1 %cmp
27252725}
27262726
2727+ define i1 @icmp_nsw_false_6 (i8 %V ) {
2728+ ; CHECK-LABEL: @icmp_nsw_false_6(
2729+ ; CHECK-NEXT: [[ADD:%.*]] = add i8 [[V:%.*]], 6
2730+ ; CHECK-NEXT: [[ADDNSW:%.*]] = add nsw i8 [[V]], -1
2731+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[ADD]], [[ADDNSW]]
2732+ ; CHECK-NEXT: ret i1 [[CMP]]
2733+ ;
2734+ %add = add i8 %V , 6
2735+ %addnsw = add nsw i8 %V , -1
2736+ %cmp = icmp sgt i8 %add , %addnsw
2737+ ret i1 %cmp
2738+ }
2739+
2740+ define i1 @icmp_nsw_false_7 (i8 %V ) {
2741+ ; CHECK-LABEL: @icmp_nsw_false_7(
2742+ ; CHECK-NEXT: [[ADD:%.*]] = add i8 [[V:%.*]], -1
2743+ ; CHECK-NEXT: [[ADDNSW:%.*]] = add nsw i8 [[V]], 3
2744+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i8 [[ADD]], [[ADDNSW]]
2745+ ; CHECK-NEXT: ret i1 [[CMP]]
2746+ ;
2747+ %add = add i8 %V , -1
2748+ %addnsw = add nsw i8 %V , 3
2749+ %cmp = icmp sle i8 %add , %addnsw
2750+ ret i1 %cmp
2751+ }
2752+
2753+ define i1 @icmp_nsw_false_8 (i8 %V ) {
2754+ ; CHECK-LABEL: @icmp_nsw_false_8(
2755+ ; CHECK-NEXT: [[ADD:%.*]] = add i8 [[V:%.*]], -15
2756+ ; CHECK-NEXT: [[ADDNSW:%.*]] = add nsw i8 [[V]], 42
2757+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i8 [[ADD]], [[ADDNSW]]
2758+ ; CHECK-NEXT: ret i1 [[CMP]]
2759+ ;
2760+ %add = add i8 %V , -15
2761+ %addnsw = add nsw i8 %V , 42
2762+ %cmp = icmp sge i8 %add , %addnsw
2763+ ret i1 %cmp
2764+ }
2765+
27272766define i1 @icmp_nsw_i8 (i8 %V ) {
27282767; CHECK-LABEL: @icmp_nsw_i8(
27292768; CHECK-NEXT: ret i1 true
@@ -2868,6 +2907,42 @@ define i1 @icmp_nsw_11(i32 %V) {
28682907 ret i1 %cmp
28692908}
28702909
2910+ define i1 @icmp_nsw_12 (i32 %V ) {
2911+ ; CHECK-LABEL: @icmp_nsw_12(
2912+ ; CHECK-NEXT: ret i1 true
2913+ ;
2914+ %add5 = add i32 %V , 2
2915+ %add6 = add nsw i32 %V , 3
2916+ %cmp = icmp slt i32 %add5 , %add6
2917+ ret i1 %cmp
2918+ }
2919+
2920+ define i1 @icmp_nsw_13 (i32 %V ) {
2921+ ; CHECK-LABEL: @icmp_nsw_13(
2922+ ; CHECK-NEXT: [[ADD5:%.*]] = add i32 [[V:%.*]], 7
2923+ ; CHECK-NEXT: [[ADD6:%.*]] = add nsw i32 [[V]], 10
2924+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i32 [[ADD5]], [[ADD6]]
2925+ ; CHECK-NEXT: ret i1 [[CMP]]
2926+ ;
2927+ %add5 = add i32 %V , 7
2928+ %add6 = add nsw i32 %V , 10
2929+ %cmp = icmp sle i32 %add5 , %add6
2930+ ret i1 %cmp
2931+ }
2932+
2933+ define i1 @icmp_nsw_14 (i32 %V ) {
2934+ ; CHECK-LABEL: @icmp_nsw_14(
2935+ ; CHECK-NEXT: [[ADD5:%.*]] = add i32 [[V:%.*]], 7
2936+ ; CHECK-NEXT: [[ADD6:%.*]] = add nsw i32 [[V]], 10
2937+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ADD5]], [[ADD6]]
2938+ ; CHECK-NEXT: ret i1 [[CMP]]
2939+ ;
2940+ %add5 = add i32 %V , 7
2941+ %add6 = add nsw i32 %V , 10
2942+ %cmp = icmp sge i32 %add5 , %add6
2943+ ret i1 %cmp
2944+ }
2945+
28712946define i1 @icmp_nsw_nonpos (i32 %V ) {
28722947; CHECK-LABEL: @icmp_nsw_nonpos(
28732948; CHECK-NEXT: ret i1 false
@@ -2890,6 +2965,45 @@ define i1 @icmp_nsw_nonpos2(i32 %V) {
28902965 ret i1 %cmp
28912966}
28922967
2968+ define i1 @icmp_nsw_nonpos3 (i32 %V ) {
2969+ ; CHECK-LABEL: @icmp_nsw_nonpos3(
2970+ ; CHECK-NEXT: [[ADD5:%.*]] = add i32 [[V:%.*]], -2
2971+ ; CHECK-NEXT: [[ADD6:%.*]] = add nsw i32 [[V]], -5
2972+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i32 [[ADD5]], [[ADD6]]
2973+ ; CHECK-NEXT: ret i1 [[CMP]]
2974+ ;
2975+ %add5 = add i32 %V , -2
2976+ %add6 = add nsw i32 %V , -5
2977+ %cmp = icmp sle i32 %add5 , %add6
2978+ ret i1 %cmp
2979+ }
2980+
2981+ define i1 @icmp_nsw_nonpos4 (i32 %V ) {
2982+ ; CHECK-LABEL: @icmp_nsw_nonpos4(
2983+ ; CHECK-NEXT: [[ADD5:%.*]] = add i32 [[V:%.*]], -10
2984+ ; CHECK-NEXT: [[ADD6:%.*]] = add nsw i32 [[V]], -30
2985+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[ADD5]], [[ADD6]]
2986+ ; CHECK-NEXT: ret i1 [[CMP]]
2987+ ;
2988+ %add5 = add i32 %V , -10
2989+ %add6 = add nsw i32 %V , -30
2990+ %cmp = icmp sgt i32 %add5 , %add6
2991+ ret i1 %cmp
2992+ }
2993+
2994+ define i1 @icmp_nsw_nonpos5 (i32 %V ) {
2995+ ; CHECK-LABEL: @icmp_nsw_nonpos5(
2996+ ; CHECK-NEXT: [[ADD5:%.*]] = add i32 [[V:%.*]], -15
2997+ ; CHECK-NEXT: [[ADD6:%.*]] = add nsw i32 [[V]], -100
2998+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ADD5]], [[ADD6]]
2999+ ; CHECK-NEXT: ret i1 [[CMP]]
3000+ ;
3001+ %add5 = add i32 %V , -15
3002+ %add6 = add nsw i32 %V , -100
3003+ %cmp = icmp sge i32 %add5 , %add6
3004+ ret i1 %cmp
3005+ }
3006+
28933007declare i11 @llvm.ctpop.i11 (i11 )
28943008declare i73 @llvm.ctpop.i73 (i73 )
28953009declare <2 x i13 > @llvm.ctpop.v2i13 (<2 x i13 >)
0 commit comments